leet334遞增的三元子序列
阿新 • • 發佈:2018-11-10
題目:
分析:
- 選取第一個元素為主元
- 遍歷陣列,當前元素大於主元,如果當前元素同時大於遞增序列棧頂元素,將當前元素壓入遞增序列棧,如果此時該元素大於前遞增序列棧棧頂,則返回真;如果當前元素小於遞增序列棧頂元素,清空當前遞增序列棧,如果彈出棧的棧頂元素小於前遞增序列棧棧頂元素,則替換前遞增序列棧
- 當前元素小於主元,替換主元,如果當前遞增序列棧長度為2,則新增至前遞增序列棧
- 該演算法時間複雜度為O(n),佔用記憶體為兩個常數尺寸的棧,空間複雜度為O(1)
程式碼:
class Solution(object): def increasingTriplet(self, nums): """ :type nums: List[int] :rtype: bool """ if len(nums) < 3: return False major = nums[0] stack = [major] stack2 = [] for x in nums[1:]: if x > major: if stack2: if x > stack2[-1]: return True if x > stack[-1]: stack.append(x) else: if len(stack) == 2: if stack2: if x < stack2: stack2 = stack[:] else: stack2 = stack[:] stack = [major] stack.append(x) elif x < major: major = x if len(stack) == 2: if stack2: if x < stack2: stack2 = stack[:] else: stack2 = stack[:] stack = [x] # print stack if len(stack) >= 3: return True return False
思考: