开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
题目 leetcode.cn/
-
给你一个整数数组
nums(下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加1。- 比方说,如果
nums = [1,2,3],你可以选择增加nums[1]得到nums = [1,3,3]。
- 比方说,如果
-
请你返回使
nums严格递增 的 最少 操作次数。 -
我们称数组
nums是 严格递增的 ,当它满足对于所有的0 <= i < nums.length - 1都有nums[i] < nums[i+1]。一个长度为1的数组是严格递增的一种特殊情况。
示例
-
输入: nums = [1,1,1];输出: 3解释: 你可以进行如下操作:- 增加 nums[2] ,数组变为 [1,1,2] 。
- 增加 nums[1] ,数组变为 [1,2,2] 。
- 增加 nums[2] ,数组变为 [1,2,3] 。
-
输入: nums = [1,5,2,4,1];输出: 14 -
输入: nums = [8];输出: 0
提示
1 <= nums.length <= 50001 <= nums[i] <= 100000
代码
function minOperations(nums: number[]): number {
let count = 0
for(let k = 0; k < nums.length - 1; k++){
if(nums[k] >= nums[k+1]){
count += nums[k] - nums[k+1] + 1;
nums[k+1] = nums[k+1] + nums[k] - nums[k+1] + 1;
}
}
return count;
};
-
在不改变原数组内元素位置的前提下,将原数组变为严格的升序数组。而且每次只能使元素加一
-
一次遍历:
- 遍历整个数组,得到数组内的每一项。将数组的前一项和后一项比较
- 如果前一项大于等于后一项,那么这两项就不是按照严格递增顺序的,需要使用
加一操作 - 加多少?前一项减去后一项的差值,还要加上一,如果只加上差值的话,只能做到和前一项相等
- 然后再将加的结果赋值给小的那一项,记得在原来的基础上加上所做加一操作的次数
- 如果前一项小于后一项,那么不做任何操作,因为它本来就是严格递增的
-
循环的遍历范围:如果从数组的第一项开始,那么一直取到数组的倒数第二位,因为下方要比较后一项
nums[k+1]。也可以从数组的第二位开始取,每次比较当前项和前一项的大小,这样一直取值到数组最后一位