Open louzhedong opened 5 years ago
给你一个整数数组 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
给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1。
nums
如果符合下列情况之一,则数组 A 就是 锯齿数组:
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
如果向量两个元素,大小顺序不对,总有一个元素需要执行递减的操作
/** * @param {number[]} nums * @return {number} */ var movesToMakeZigzag = function (nums) { var copyNums = copy(nums); // nums[0] > nums[1] var count1 = 0; for (var i = 0; i < nums.length - 1; i++) { if (i % 2 == 0) { // 偶数 while (nums[i] <= nums[i + 1]) { nums[i + 1]--; count1++; } } else { while (nums[i] >= nums[i + 1]) { nums[i]--; count1++; } } } // nums[0] < nums[1] var count2 = 0; for (var i = 0; i < copyNums.length - 1; i++) { if (i % 2 == 0) { // 偶数 while (copyNums[i] >= copyNums[i + 1]) { copyNums[i]--; count2++; } } else { while (copyNums[i] <= copyNums[i + 1]) { copyNums[i + 1]--; count2++; } } if (copyNums.length % 2 != 0) { if (copyNums[copyNums.length - 1] >= copyNums[copyNums.length - 2]) { copyNums[copyNums.length - 1]--; count2++; } } } return Math.min(count1, count2); }; function copy(array) { var res = []; for (var i = 0; i < array.length; i++) { res.push(array[i]); } return res; }
习题
思路
如果向量两个元素,大小顺序不对,总有一个元素需要执行递减的操作
解答