【每日一题Day53】LC1827最少操作数使数组递增 | 贪心

简介: 全局最优:使用最少的步骤使数组严格递增

最少操作数使数组递增【LC1827】


给你一个整数数组 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[i]只需要比nums[i-1]大一即可


。全局最优:使用最少的步骤使数组严格递增


  • 实现:遍历整个数组得到最小操作数


class Solution {
    public int minOperations(int[] nums) {
        int n = nums.length;
        int ans = 0;
        for (int i = 1; i < n; i++){
            if (nums[i] <= nums[i-1]){
                ans += nums[i-1] - nums[i] + 1;
                nums[i] = nums[i-1] + 1;
            }
        }
        return ans;
    }
}


。复杂度


  • 时间复杂度:O ( n )
  • 空间复杂度:O ( 1 )
目录
相关文章
|
5月前
【每日一题Day205】LC2441与对应负数同时存在的最大正整数 | 哈希表
【每日一题Day205】LC2441与对应负数同时存在的最大正整数 | 哈希表
44 1
|
5月前
|
存储
【每日一题Day254】LC445两数相加Ⅱ | 链表反转 栈
【每日一题Day254】LC445两数相加Ⅱ | 链表反转 栈
42 0
|
5月前
|
索引
【每日一题Day131】LC1144递减元素使数组呈锯齿状 | 贪心+枚举
【每日一题Day131】LC1144递减元素使数组呈锯齿状 | 贪心+枚举
44 0
|
5月前
|
存储
【每日一题Day253】LC2两数相加 | 链表模拟
【每日一题Day253】LC2两数相加 | 链表模拟
23 0
|
5月前
【每日一题Day155】LC1630等差子数组 | 枚举+排序
【每日一题Day155】LC1630等差子数组 | 枚举+排序
39 0
|
5月前
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
41 1
|
5月前
【每日一题Day368】LC421数组中两个数的最大异或值 | 字典树
【每日一题Day368】LC421数组中两个数的最大异或值 | 字典树
29 0
|
5月前
【每日一题Day178】LC1042不邻接植花 | 位运算 + 枚举
【每日一题Day178】LC1042不邻接植花 | 位运算 + 枚举
50 0
|
5月前
【每日一题Day299】LC2235两整数相加
【每日一题Day299】LC2235两整数相加
29 0
|
5月前
【每日一题Day142】LC1590使数组和能被 P 整除 | 前缀和+哈希表
【每日一题Day142】LC1590使数组和能被 P 整除 | 前缀和+哈希表
40 0