问题描述
小U有一个长度为 n 的数组。如果数组中存在长度为 3 的子数组,满足 a_i <= a_{i+1} <= a_{i+2},则这个数组被称为“有趣的”。小U可以通过修改数组中的某个元素来打破这种“有趣”的性质。她想知道,最少需要进行多少次操作才能使数组变得不再有趣。
测试样例
样例1:
输入:
n = 5, a = [6, 2, 4, 5, 1]
输出:1
样例2:
输入:
n = 6, a = [1, 2, 3, 4, 5, 6]
输出:2
样例3:
输入:
n = 4, a = [5, 3, 1, 7]
输出:0
解决办法
我们可以看数组的长度和修改次数的关系,如果像{1、2、3},只要修改一次就可以,像{1、2、3、4}我们也只要修改一次为了使次数最少,我们只能修改2,像{1、2、3、4、5}这样的,为了使次数最少,我们要修改两次。多写几组我们就能发现其中的规律,在出现有趣数组的长度大于三时,我们选中这个数组的仅有3个元素子有趣数组改第三个即最后一个可以使操作次数最小。
public class Main {
public static int solution(int n, int[] a) {
// write code here
int i,res=0,start=0,end=0,len;
for(i=1;i<n;i++){
if(a[i]>=a[i-1]){
end=i;
}else{
len=end-start+1;
if(len>2){
if(len%2==1){
len++;
}
res+=(len-2)/2;
}
start=i;
}
}
if(end==i-1){
len=end-start+1;
if(len>2){
if(len%2==1){
len++;
}
res+=(len-2)/2;
}
}
System.out.println(res);
return res;
}
}