1. 問題描述:
給定一個未排序的數組,判斷這個數組中是否存在長度爲 3 的遞增子序列。
數學表達式如下:
如果存在這樣的 i, j, k, 且滿足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否則返回 false 。說明: 要求算法的時間複雜度爲 O(n),空間複雜度爲 O(1) 。
示例 1:
輸入: [1,2,3,4,5]
輸出: true
示例 2:
輸入: [5,4,3,2,1]
輸出: false
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/increasing-triplet-subsequence
2. 思路分析:
這道題目其實需要找出一個遞增的三元子序列即可,所以我們的想法是需要找出到目前爲止第一小的數字與第二小的數字,當出現第三小的數字的時候那麼說明這個時候出現了一個遞增的三元子序列直接返回True即可,這個貪心策略是正確的,因爲我們只是求解出當前到當前位置的三元子序列
3. 代碼如下:
class Solution:
def increasingTriplet(self, nums: List[int]) -> bool:
# 其實是找出目前第一小的與第二小的數字, 最後假如發現出現了第三小的數字說明成功了
a, b = sys.maxsize, sys.maxsize
for num in nums:
# 第一小的數字
if num <= a:
a = num
# 第二小的數字
elif num <= b:
b = num
else: return True
return False