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
广告