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的值。

  • 将温度设置为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