LeetCode #1243. Array Transformation
题目
解题方法
设置一个信号arrayneverchange=0,当它为0时做循环,第一重循环里加一个列表todayschange = [],然后开始遍历arr的第一位到倒数第二位元素,判断它是否要增加或减少,将其变动记录在todayschange中,等arr遍历结束再遍历todayschange改数据,如果todayschange仍然为空的,就说明不再变化了,此时可以返回arr。
时间复杂度:O(nk),k是可能变动的天数
空间复杂度:O(n)
代码
class Solution:
def transformArray(self, arr: List[int]) -> List[int]:
arrayneverchange = 0
while not arrayneverchange:
todayschange = []
for i in range(1, len(arr)-1):
if arr[i] < arr[i-1] and arr[i] < arr[i+1]:
todayschange.append([i, 1])
elif arr[i] > arr[i-1] and arr[i] > arr[i+1]:
todayschange.append([i, -1])
else: pass
if len(todayschange):
for i in todayschange: arr[i[0]] += i[1]
else:
arrayneverchange = 1
return arr