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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP