LeetCode 1144. Decrease Elements To Make Array Zigzag
考点 | 难度 |
---|---|
Binary Search | Easy |
题目
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)