leetcode1144-递减元素使数组呈锯齿状

原题

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

解法

思想

分成奇、偶两种情况进行遍历,找到满足条件的最小值

代码

class Solution {
    public int movesToMakeZigzag(int[] nums) {
        int count1 = 0;
        for(int i = 0;i<nums.length;i+=2){
            int cur = nums[i];
            int diff = cur - Math.min(i==0?1001:nums[i-1],i == nums.length-1?1001:nums[i+1]) + 1;
            if(diff > 0) count1+=diff;
        }
        int count2 = 0;
        for(int i = 1;i<nums.length;i+=2){
            int cur = nums[i];
            int diff = cur - Math.min(nums[i-1],i == nums.length-1?1001:nums[i+1]) + 1;
            if(diff > 0) count2+=diff;
        }
        return Math.min(count1,count2);
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode1144-%e9%80%92%e5%87%8f%e5%85%83%e7%b4%a0%e4%bd%bf%e6%95%b0%e7%bb%84%e5%91%88%e9%94%af%e9%bd%bf%e7%8a%b6/

(0)
彭晨涛彭晨涛管理者
上一篇 2020年6月4日
下一篇 2020年6月6日

相关推荐

  • 程序员面试金典08.11-硬币

    原题(来源Leetcode) 硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007) 示…

    算法 2020年4月23日
    0170
  • leetcode456-132模式

    原题 给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak &lt…

    算法 2020年1月30日
    0150
  • leetcode274-H指数

    原题 https://leetcode.cn/problems/h-index/description 题解 核心是求数组中,大于等于h的数的个数 大于等于 h,个数的最大值。 核…

    算法 2024年3月18日
    050
  • leetcode69-x的平方根

    原题 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例1: 输入:…

    算法 2019年12月30日
    040
  • leetcode983-最低票价

    原题 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车…

    算法 2020年5月6日
    0120
  • leetcode779-第K个语法符号

    原题 在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。 给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始) 例子: 输入: N…

    算法 2020年1月22日
    0110
  • leetcode347-前K个高频元素

    原题 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例2: 输入: n…

    算法 2019年12月28日
    0150
  • leetcode820-单词的压缩编码

    原题 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其表示为 S …

    算法 2020年3月28日
    090
  • leetcode155-最小栈

    原题 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。 pop() – 删除栈顶的元素。 top() …

    算法 2019年12月11日
    0130
  • leetcode1160-拼写单词

    原题 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字…

    算法 2020年3月17日
    0130

发表回复

登录后才能评论