解题思路:
由于是要求的O(n)的时间复杂度,所以暴力解法一定是不可以的,但是如果利用好中间状态,就能解决好这道题。保存一个first作为我们现在认为比较小的数字,一个second作为我们任务比较小的第二个数字,当遇到一个比first更小的数字的时候我们不能立马就去将其代替first,所以我们需要将其保存下来,放到_first中以作备用,当遇到满足条件的下一个数字的时候,就可以用_first和对应的数字去替换first
和second,如果遇到比second大的数字,则返回True。
具体代码如下:
class Solution:
def increasingTriplet(self, nums: List[int]) -> bool:
first = '#'
second = '#'
_first = '#'
for i in range(len(nums)):
if first == '#':
first = nums[i]
else:
if first < nums[i] and second == '#':
second = nums[i]
elif first >= nums[i] and second == '#':
first = nums[i]
elif first < nums[i] and second != '#':
if second < nums[i]:
return True
elif second >= nums[i]:
second = nums[i]
elif first >= nums[i] and second != '#':
if _first == '#':
_first = nums[i]
elif _first != '#':
if nums[i] <= _first:
_first = nums[i]
else:
first = _first
second = nums[i]
_first = '#'
return False