Increasing Triplet Subsequence
这道题说是跟LIS思路一样,其实个人认为和LIS完全不是一个概念的东西,应该说是用了一种完全不能算任何算法的思维去解决了这道题,现在可以这样假设,如果序列的前三个数是4,5,2,当我们用两个变量去记录了4和5时,我们扫描到了2,这时我们应该去改变第一个存储了4的变量,将它变为2,而不改变5的那个变量,这样相当于我们记录了两个有可能成为题目要求的子序列,也就是说,即使下一个数是7,因为5的存在我们也没有把4,5这个潜在答案的序列扔掉,如果下一个是3,那就改变5的变量因为2,3序列肯定比4,5序列更容易找到符合要求的解,如果下一个是1,那我们改变的还是存储2的变量,4,5序列依然被保存着,这样的思路就可以用来判断是不是有这样的三元上升子序列了,可以说是一种很特殊的思维,目前看到过类似这种的就只有投票算法了,下面是代码
class Solution(object):
def increasingTriplet(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
a, b = sys.maxint, sys.maxint
for num in nums:
if num <= a:
a = num
elif num <= b:
b = num
else:
return True
return False