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。
  • 檢查最大值是否小於temp,然後將最大值設定為temp。
  • 檢查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

更新於: 2020年8月3日

589 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.