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

C++で0または1のいずれかとして隣接する要素間の差がある最大長のサブシーケンス


任意のサイズの配列が与えられ、タスクは、隣接する要素間の差が0または1である要素を使用して、指定された配列内のサブシーケンスを見つけることです。

入力 − int arr [] ={2、1、5、6、3、4、7、6}

出力 −隣接する要素間の差が0または1である最大長のサブシーケンスは− 3

説明 −差が0または1の配列内の隣接する要素のサブシーケンスは、{2、1}です。したがって、サブシーケンスの最大長は2です。

入力 − int arr [] ={2、1、7、6、5}

出力 −隣接する要素間の差が0または1である最大長のサブシーケンスは− 3

説明 −差が0または1の配列内の隣接する要素は、{7、6、5}です。したがって、サブシーケンスの最大長は3です。

以下のプログラムで使用されているアプローチは次のとおりです

  • 正の要素と負の要素を含むことができる整数型の配列を入力します。
  • 配列のサイズを計算し、配列とサイズを関数に渡して機能を強化します。
  • 入力配列と同じサイズの一時配列を取得します。たとえば、temp [size]と別の変数の最大値を使用して、0に設定します。
  • 0から配列のサイズまでのループを開始します
  • ループ内で、temp[i]を1に設定します
  • 1からサイズまで別のループを開始します
  • ループ内で、0からjがi未満になるまで別のループjを開始します
  • ループ内で、差が0または1の隣接する要素かどうかを確認してから、temp [i]+1でtemp[i]を設定します
  • 0からサイズまでのループを開始
  • ループ内で、maximumがtemp [i]未満かどうかを確認してから、maximum =temp [i]
  • に設定します。
  • 最大値を返す
  • 結果を印刷する

#include <bits/stdc++.h>
using namespace std;
//function to calculate the maximum difference
int maximum_adja(int arr[], int size){
   int temp[size], maximum = 0;
   for (int i=0; i<size; i++){
      temp[i] = 1;
   }
   for (int i=1; i<size; i++){
      for (int j=0; j<i; j++){
         if (abs(arr[i] - arr[j]) <= 1 && temp[i] < temp[j] + 1){
            temp[i] = temp[j] + 1;
         }
      }
   }
   for (int i=0; i<size; i++){
      if (maximum < temp[i]){
         maximum = temp[i];
      }
   }
   return maximum;
}
int main(){
   int arr[] = {1, 5, 3, 7, 8, 9, 2};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Maximum length subsequence with difference between adjacent elements as either 0
   or 1 is: "<<maximum_adja(arr, size);
   return 0;
}

出力

Maximum length subsequence with difference between adjacent elements as either 0 or 1 is: 3

  1. C++でのノードと祖先の最大の違い

    二分木のルートがあるとすると、異なるノードAとBが存在する最大値Vを見つける必要があります。ここでV =|Aの値–Bの値| AはBの祖先です。したがって、ツリーが-のような場合 その場合、出力は7になります。祖先ノードの違いは[(8-3)、(7-3)、(8-1)、(10-13)]のようになり、その中で(8-1)=7は最大。 これを解決するには、次の手順に従います- 最初にans0を定義します Solve()と呼ばれる1つのメソッドを定義します。これにより、ツリーノードcurrMinとcurrMaxが使用されます。これは次のように機能します- ノードがnullの

  2. C++ではすべての値が0またはnの行列の最大行列式

    問題の説明 正の数nを与え、0またはnの組み合わせで形成でき、最大の行列式を持つ3*3行列を見つける必要があります。 例 n =15の場合、次のように行列を作成できます- {{15, 15, 0}{0, 15, 15}{15, 0, 0}} 0またはnの要素を持つ3*3行列の場合、可能な最大行列式は2 *(n) 3です。 。したがって、答えは- 2 *(15) 3 =6750 アルゴリズム 0またはnの要素を持つ3*3行列の場合、可能な最大行列式は2 *(n) 3です。 例 例を見てみましょう- #include <bits/stdc++.h> using nam