(数组) leetcode 1144

class Solution {
public:
    int movesToMakeZigzag(vector<int>& nums) {
        //判断每个位置 i 对于它的前后 i-1 和 i+1 需要减少多少
        //按照奇偶分类保存
        int ans[2]={0};
        for(int i=0; i<nums.size(); i++){
            int d1=0, d2=0;
            if(i>0 && nums[i] >= nums[i-1]){
                //对于位置i的前面i-1所需减少的最小操作数
                d1 = nums[i] - nums[i-1] +1;
            }
            if(i<nums.size()-1 && nums[i] >= nums[i+1]){
                //对于位置i的后面i+1所需减少的最小操作数
                d2 = nums[i] - nums[i+1] +1;
            }
            //ans[0]保存偶数位, ans[1]保存奇数位
            //对于位置i,只需要减去前后操作数的较大值,不能重复减
            ans[i%2] += max(d1, d2);  
        }
        return min(ans[0], ans[1]);
    }
};

猜你喜欢

转载自www.cnblogs.com/Bella2017/p/12118602.html