美文网首页
1144. 递减元素使数组呈锯齿状

1144. 递减元素使数组呈锯齿状

作者: Chiduru | 来源:发表于2020-06-26 00:14 被阅读0次

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

    【Idea】
    主要是思路,代码优化没有什么trick
    分奇偶规则两种遍历:
    当当前下标为奇数/ 偶数位时, 大于or小于后面一位元素时,将大的元素递减为较小元素-1的值

    一个tips:
    元素只能减, 不能加

    【Solution】

    class Solution:
        def movesToMakeZigzag(self, nums: List[int]) -> int:
            length = len(nums)
            cnt0 = 0
            tp_num = copy.copy(nums)
            for i in range(length):  # 偶数规则
                # 如果遍历位是偶数索引并且该元素小于后面一位 => 把后面元素置为-1的元素
                if i%2 == 0 and i+1 <= length-1 and tp_num[i] <= tp_num[i+1]: 
                    cnt0 += tp_num[i+1] - (tp_num[i]-1)
                    tp_num[i+1] = tp_num[i] - 1
                # 如果遍历位是奇数索引并且该元素大于后面一位 => 该元素置为后面元素-1
                elif i%2 == 1 and i+1 <= length-1 and tp_num[i] >= tp_num[i+1]:
                    cnt0 += abs(tp_num[i]+1 - tp_num[i+1])
                    tp_num[i] = tp_num[i+1] - 1
    
            tp_num = nums
            cnt1 = 0
            for j in range(length):     # 奇数规则
                # 如果是奇数索引判定并且该元素小于后面一位, 把后面元素置为-1的元素
                if j%2 == 1 and j+1 <= length-1 and tp_num[j] <= tp_num[j+1]:
                    cnt1 += abs(tp_num[j]-1 - tp_num[j+1])
                    tp_num[j+1] = tp_num[j] - 1
                # 如果是偶数索引并且该元素大于等于后面一位 => 把该元素置位后一位元素-1
                elif j%2 == 0 and j+1 <= length-1 and tp_num[j] >= tp_num[j+1]:
                    cnt1 += abs(tp_num[j]+1 - tp_num[j+1])
                    tp_num[j] = tp_num[j+1] + 1
    
            return min(cnt0, cnt1)
    

    相关文章

      网友评论

          本文标题:1144. 递减元素使数组呈锯齿状

          本文链接:https://www.haomeiwen.com/subject/dgqyfktx.html