leetcode__递增的三元子序列__python

解题思路:

由于是要求的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值