LeetCode知识点总结 - 1144

给定一个整数数组,文章讨论如何通过最少的步骤操作,要么使所有偶数索引位置的元素大于相邻元素,要么使所有奇数索引位置的元素大于相邻元素,从而将其转换为锯齿形数组。算法通过迭代计算每一步所需的移动次数并记录在res数组中,最后返回最小值。
摘要由CSDN通过智能技术生成

LeetCode 1144. Decrease Elements To Make Array Zigzag

考点难度
Binary SearchEasy
题目

Given an array nums of integers, a move consists of choosing any element and decreasing it by 1.

An array A is a zigzag array if either:

Every even-indexed element is greater than adjacent elements, ie. A[0] > A[1] < A[2] > A[3] < A[4] > …
OR, every odd-indexed element is greater than adjacent elements, ie. A[0] < A[1] > A[2] < A[3] > A[4] < …
Return the minimum number of moves to transform the given array nums into a zigzag array.

思路

有两种选择:让奇数位更小或者偶数位更小。从第一个数开始iterate,计算让当前数字小于两边所需要的moves,记录在res[i%2]。最后return res里更小的。

答案
class Solution(object):
    def movesToMakeZigzag(self, A):
        A = [float('inf')] + A + [float('inf')]
        res = [0, 0]
        for i in xrange(1, len(A) - 1):
            res[i % 2] += max(0, A[i] - min(A[i - 1], A[i + 1]) + 1)
        return min(res) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值