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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告