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

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


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

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

出力 −隣接する要素間の差が0または1である最大長のサブアレイは− 2

説明 −差が0または1の配列内の隣接する要素は、{2、1}、{5、6}、{3、4}、および{7.6}です。したがって、サブアレイの最大長は2です。

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

出力 −隣接する要素間の差が0または1である最大長のサブアレイは− 3

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

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

  • 正の要素と負の要素を含むことができる整数型の配列を入力します。
  • 配列のサイズを計算し、配列とサイズを関数に渡して機能を強化します。
  • 一時変数iを取得し、それを0に設定し、最大変数を0に設定します。
  • iから配列のサイズまでループを開始します。
  • ループ内で、jをiに設定します
  • 0であるかどうかに関係なく、隣接する要素でサブアレイを計算する別のループを開始します。
  • ループ内で、iの値をインクリメントします。
  • tempをi-j+1に設定
  • 最大値が温度よりも低いかどうかを確認してから、最大値を温度に設定します。
  • jがiと等しいかどうかを確認してから、iの値をインクリメントします
  • 最大値を返す
  • 結果を印刷します。

#include<bits/stdc++.h>
using namespace std;
//function to calculate maximum Length subarray with
// 0 or 1 difference between adjacent elements
int maximum_diff(int arr[], int size){
   int i = 0;
   int maximum = 0;
   while (i < size){
      int j = i;
      while (i+1 < size && (abs(arr[i] - arr[i + 1]) == 1 || abs(arr[i] - arr[i + 1]) == 0)){
         i++;
      }
      int temp = i - j + 1;
      if (maximum < temp){
         maximum = temp;
      }
      if(j == i){
         i++;
      }
   }
   return maximum;
}
int main(){
   int arr[] = { 2, 1, 5, 6, 3, 4, 7, 6};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Maximum length subarray with difference between adjacent elements as either 0 or 1
   are: "<< maximum_diff(arr, size);
}

入力

Maximum length subarray with difference between adjacent elements as either 0 or 1 are: 2

  1. C++の行列の任意の列で最大の差を持つペアを検索します

    1つの行列または次数NxNがあるとします。行列のどの列とも最大の差を形成する要素のペアを見つける必要があります。したがって、行列が-のような場合 1 2 3 5 3 5 9 6 7 したがって、出力は8になります。ペアは列0から(1、9)であるため、 考え方は単純です。各列の最大要素と最小要素の違いを簡単に見つける必要があります。次に、最大差を返します。 例 #include<iostream> #define N 5 using namespace std; int maxVal(int x, int y){  

  2. C++の積に等しいLCMの最大長サブアレイ

    配列Aがあるとします。サブ配列の最大長を見つける必要があります。そのLCMは、そのサブ配列の要素の積と同じです。そのようなサブ配列が見つからない場合は、-1を返します。配列が{6、10、21}で、長さが2であるとすると、サブ配列{10、21}があり、そのLCMは210で、積も210です。 アプローチは簡単です。 2以上の長さの可能なすべてのサブ配列をチェックする必要があります。サブ配列が条件を満たす場合は、回答を最大の回答とサブ配列の長さとして更新します。 例 #include <iostream> using namespace std; int gcd(int a, int