小U的无趣数组

127 阅读1分钟

问题描述

小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;
    }

}