• [leetcode 周赛 148] 1144 递减元素使数组呈锯齿状


    1144 Decrease Elements To Make Array Zigzag 递减元素使数组呈锯齿状

    描述

    给你一个整数数组 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

    思路

    首先看清条件:

    1. 每次操作减一
    2. 偶数索引/奇数索引元素大于相邻元素

    可以看做为:
    通过减一操作, 将偶数索引/奇数索引元素减少至小于相邻的元素, 如此奇数索引/偶数索引的元素就大于相邻元素!!!

    这是一种贪心算法, 最终两种情况相比较, 选取最小的那个输出.

    代码实现

    class Solution {
        public int movesToMakeZigzag(int[] nums) {
            if (null == nums || nums.length == 0) return -1;
            if (nums.length == 1) return 0;
            if (nums.length == 2) {
                return nums[0] == nums[1] ? 1 : 0;
            }
            
            // j 表示当前元素与相邻元素的差值
            //      差值含义: 为正表示需要减少的操作次数 
            //               为负则不用理会(已经符合条件)
            // s 表示偶数索引符合条件需要的操作次数
            // t 表示奇数索引符合条件需要的操作次数
            // n 表示数组长度
            int j = 0, s = 0, t = 0, n = nums.length;
            // 计算偶数索引需要减少多少次数才能符合条件
            for (int i = 0; i < n; i += 2) {
                j = 0;
                // 索引0不能往前运算
                if (i != 0) j = Math.max(j, nums[i] - nums[i-1] + 1);
                // 尾部索引不能往后运算
                if (i+1 < n) j = Math.max(j, nums[i] - nums[i+1] + 1);
                s += j;
            }
            // 计算奇数索引需要减少多少次数才能符合条件
            for (int i = 1; i < n; i += 2) {
                j = 0;
                if (i != 0) j = Math.max(j, nums[i] - nums[i-1] + 1);
                if (i+1 < n) j = Math.max(j, nums[i] - nums[i+1] + 1);
                t += j;
            }
            
            return Math.min(s, t);
        }
    }
    
  • 相关阅读:
    监控服务器配置(一)-----Prometheus安装配置
    mongo可视化工具adminMongo安装
    Grafana 下载与安装(v5.4.1)
    Grafana+Prometheus系统监控之Redis
    聊聊redis的监控工具
    Linux 服务器buff/cache清理
    redis为什么内存不宜过大
    Python 操作 mongodb 亿级数据量使用 Bloomfilter 高效率判断唯一性 例子
    Redis-3.2.0集群配置(redis cluster)
    在reshard过程中,将会询问reshard多少slots:
  • 原文地址:https://www.cnblogs.com/slowbirdoflsh/p/11303634.html
Copyright © 2020-2023  润新知