LeetCode #1243. Array Transformation

题目

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
posted @ 2020-12-01 15:02  老鼠司令  阅读(51)  评论(0编辑  收藏  举报