(数组) 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]); } };