C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++プログラムで指定された条件を満たすサブ配列の最大サイズ


この問題では、n個の整数の配列arr[]が与えられます。私たちのタスクは、指定された条件を満たすサブ配列の最大サイズを見つけるプログラムを作成することです。

問題の説明 −以下の条件のいずれかを満たす最大のサブアレイの長さを見つける必要があります

  • kが奇数の場合はarr[k]>arr [k + 1]、kが偶数の場合はarr [k]

  • kが奇数の場合はarr[k] arr [k+1]。サブアレイのすべての要素。

ここで、kはarr[]のサブ配列の要素のインデックスです。

問題を理解するために例を見てみましょう

入力

arr[] = {7, 3, 1, 5, 4, 2, 9}

出力

4

説明

The subarray {3, 1, 5, 4} satisfies the condition 1.
k = 1(odd), arr[k] > arr[k+1], 3 > 1
k = 2(even), arr[k] < arr[k+1], 1 < 5
k = 3(odd), arr[k] > arr[k+1], 5 > 4

ソリューションアプローチ

例から、どの条件も真であることがわかります。サブアレイには、交互に大きい小さい要素が含まれている必要があります。つまり、1番目> 2番目、2番目>3番目というようになります。

ここで、計算を簡単にするために、この関係を示す関係配列を作成します。以下は、リレーション配列を調整する方法です。

If arr[i] == arr[i + 1],relArr[i] = ‘E’
If arr[i] > arr[i + 1],relArr[i] = ‘G’
If arr[i] < arr[i + 1],relArr[i] = ‘S’

この配列を使用すると、サブ配列の最大サイズを簡単に見つけることができます。考慮されるサブアレイには、交互の「G」と「S」があります。

ソリューションの動作を説明するプログラム

#include<iostream>
using namespace std;
char findRel(int a, int b) {
   if(a > b)
      return 'G';
   else if(a < b)
      return 'S';
   return 'E';
}
int calcMaxSubArray(int arr[], int n) {
   int maxLen = 1;
   int len = 1;
   char c = findRel(arr[0], arr[1]);
   for(int i = 1; i <= n−1; i++){
      if(c == 'S' && findRel(arr[i], arr[i + 1]) == 'G')
         len++;
      else if(c == 'G' && findRel(arr[i], arr[i + 1]) == 'S')
         len++;
      else {
         if(maxLen < (len + 1))
            maxLen = (len + 1);
         len = 1;
      }
      c = findRel(arr[i], arr[i+1]);
   }
   return maxLen;
}
int main() {
   int arr[] = {7, 3, 1, 5, 4, 2, 9};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum size of sub−array that satisfies the given
   condition is "<<calcMaxSubArray(arr, n);
}
です。

出力

The maximum size of sub-array that satisfies the given condition is 4

  1. 指定された数値の桁を合計するC++プログラム

    これは、C++言語で桁の合計を計算する例です。 例 #include<iostream> using namespace std; int main() {    int x, s = 0;    cout << "Enter the number : ";    cin >> x;    while (x != 0) {       s = s + x % 10;       x = x / 10;

  2. 条件を満たす唯一の要素を返すC#プログラム

    Single()メソッドは、条件を満たす唯一の要素を返します。そのような要素が複数表示されている場合は、エラーがスローされます。 以下は文字列配列です。 string[] str = { "jack", "tom", "henry", "time"}; 次に、Single()メソッドを使用して各要素を取得します。次に、ラムダ式を使用して、長さが4より大きい要素を計算しました。 str.AsQueryable().Single(name => name.Length > 4); 例 using Sys