C ++中相邻元素之间的差异为0或1的最大长度子数组
给我们一个任意大小的数组,任务是找到给定数组的子数组,其中相邻元素之间的元素差为0或1。
输入−intarr[]={2,1,5,6,3,4,7,6}
输出-相邻元素之间的差异为0或1的最大长度子数组为-2
解释-差值为0或1的数组中的相邻元素为{2,1},{5,6},{3,4}和{7.6}。因此,子数组的最大长度为2。
输入−intarr[]={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