1287. 递增的三元子序列
1287. 递增的三元子序列
给定未排序的数组,返回是否在数组中存在递增的长度为3的子序列。
完整的功能应为:
如果存在i, j, k,使得arr[i] < arr[j] < arr[k],且0 ≤ i < j < k ≤ n-1,则返回true,否则返回false。
您的算法应该以O(n)时间复杂度和O(1)空间复杂度运行。
样例
样例1
输入: [1, 2, 3, 4, 5]
输出: true
样例2
输入: [5, 4, 3, 2, 1]
输出: false
class Solution: """ @param nums: a list of integers @return: return a boolean """ def increasingTriplet(self, nums): # write your code length = len(nums) #边界判断 if len(nums) < 3: return False #初始化 first, second = nums[0], sys.maxsize #存储的要么是sys.maxsize, 要么是比first更小的值 first_prepared = sys.maxsize for index in range(1, length): #首先, 如果存在右边的值大于左边的值得话, 则first, second都有值 if second == sys.maxsize: if nums[index] < first: first = nums[index] elif nums[index] > first: second = nums[index] else: #判断是否存在第三个大于second if nums[index] > second: return True #如果在first和second之间的话 elif first < nums[index] < second: second = nums[index] #如果nums[index] < first的话 elif nums[index] < first: #如果比first_prepared更小的话,则更新first_prepared if nums[index] < first_prepared: first_prepared = nums[index] #否则存在两个更小相对值的first和second的值,则first和second均替换 else: second = first first = first_prepared first_prepared = sys.maxsize return False