营销型网站的建设重点是什么,软件开发专业词汇,贵州网站开发公司,注册网站域名后免费建站1144. 递减元素使数组呈锯齿状
题目#xff1a;
给你一个整数数组 nums#xff0c;每次 操作 会从中选择一个元素并 将该元素的值减少 1。
如果符合下列情况之一#xff0c;则数组 A 就是 锯齿数组#xff1a;
每个偶数索引对应的元素都大于相邻的元素#xff0c;即 A…1144. 递减元素使数组呈锯齿状
题目
给你一个整数数组 nums每次 操作 会从中选择一个元素并 将该元素的值减少 1。
如果符合下列情况之一则数组 A 就是 锯齿数组
每个偶数索引对应的元素都大于相邻的元素即 A[0] A[1] A[2] A[3] A[4] ... 或者每个奇数索引对应的元素都大于相邻的元素即 A[0] A[1] A[2] A[3] A[4] ... 返回将数组 nums 转换为锯齿数组所需的最小操作次数。 示例 1
输入nums [1,2,3] 输出2 解释我们可以把 2 递减到 0或把 3 递减到 1。 示例 2
输入nums [9,6,1,6,2] 输出4 提示
1 nums.length 1000 1 nums[i] 1000 来源力扣LeetCode 链接https://leetcode.cn/problems/decrease-elements-to-make-array-zigzag 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 思路
首先模拟一遍从最后一个元素开始决定最后一个元素和倒数第二个元素对比起来是”向上“或者”向下“。
然后分“向上”和“向下”两种情况进行讨论即可。
最后输出次数最少的那个。 代码
class Solution {
public:int movesToMakeZigzag(vectorint nums) {int i nums.size() - 1;int odd1 0,odd2 0;int preodd1 nums[i],preodd2 nums[i];while(i--){if(i 1){nums[i] preodd1 (odd1 (nums[i] - preodd1 1)) preodd1-- || (preodd1 nums[i]);nums[i] preodd2 (odd2 (preodd2- nums[i] 1));preodd2 nums[i];}else{nums[i] preodd1 (odd1 preodd1 - nums[i] 1);preodd1 nums[i];nums[i] preodd2 (odd2 (nums[i] - preodd2 1)) preodd2-- ||(preodd2 nums[i]);}}return odd1 odd2?odd2 : odd1;}
};