【每日一题Day131】LC1144递减元素使数组呈锯齿状 | 贪心+枚举

简介: 【每日一题Day131】LC1144递减元素使数组呈锯齿状 | 贪心+枚举

递减元素使数组呈锯齿状【LC1144】

给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1

如果符合下列情况之一,则数组 A 就是 锯齿数组

  • 每个偶数索引对应的元素都大于相邻的元素,即 A[0] > A[1] < A[2] > A[3] < A[4] > ...
  • 或者,每个奇数索引对应的元素都大于相邻的元素,即 A[0] < A[1] > A[2] < A[3] > A[4] < ...

返回将数组 nums 转换为锯齿数组所需的最小操作次数。

image.png


实现

class Solution {
    public int movesToMakeZigzag(int[] nums) {  
        int a = 0, b = 0;
        int n = nums.length;
        if (n == 1) return 0;
        for (int i = 0; i < n; i++){
            int count = 0;
            if (i - 1 >= 0){
                count = Math.max(nums[i] - nums[i - 1] + 1, count);
            }
            if (i + 1 < n){
                count = Math.max(nums[i] - nums[i + 1] + 1, count);
            }
            if ((i & 1 )== 0){// 偶数               
                a += count;
            }else{// 奇数
                b += count;
            }
        }
        return Math.min(a, b);
    }
}

复杂度

  • 时间复杂度:O ( n )

空间复杂度:O ( 1 )

目录
相关文章
|
7月前
【每日一题Day155】LC1630等差子数组 | 枚举+排序
【每日一题Day155】LC1630等差子数组 | 枚举+排序
46 0
|
7月前
【每日一题Day179】LC1157子数组中占绝大多数的元素 | 线段树
【每日一题Day179】LC1157子数组中占绝大多数的元素 | 线段树
54 0
|
7月前
|
算法 测试技术 C#
【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目
【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目
|
7月前
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
【每日一题Day204】LC1330翻转子数组得到最大的数组值 | 数学
50 1
|
7月前
|
vr&ar
【每日一题Day166】LC1053交换一次的先前排列 | 贪心
【每日一题Day166】LC1053交换一次的先前排列 | 贪心
77 1
|
7月前
|
Java
每日一题《剑指offer》数组篇之把数组排成最小的数
每日一题《剑指offer》数组篇之把数组排成最小的数
45 0
每日一题《剑指offer》数组篇之把数组排成最小的数
|
7月前
【每日一题Day358】LC2698求一个整数的惩罚数 | 递归
【每日一题Day358】LC2698求一个整数的惩罚数 | 递归
58 0
|
7月前
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
47 0
|
7月前
【每日一题Day220】LC1439有序矩阵中的第 k 个最小数组和 | 堆
【每日一题Day220】LC1439有序矩阵中的第 k 个最小数组和 | 堆
78 0
|
7月前
【每日一题Day192】LC1033移动石子直到连续 | 分类讨论 贪心
【每日一题Day192】LC1033移动石子直到连续 | 分类讨论 贪心
38 0