题目:
分析:
- 选取第一个元素为主元
- 遍历数组,当前元素大于主元,如果当前元素同时大于递增序列栈顶元素,将当前元素压入递增序列栈,如果此时该元素大于前递增序列栈栈顶,则返回真;如果当前元素小于递增序列栈顶元素,清空当前递增序列栈,如果弹出栈的栈顶元素小于前递增序列栈栈顶元素,则替换前递增序列栈
- 当前元素小于主元,替换主元,如果当前递增序列栈长度为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
思考: