給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 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
我們遍歷一遍陣列,並更新最小值和次小值,如果遍歷到結尾找到了比次小值大的數,返回true
,否則返回false
如果覺得上面的解法不容易想出來,那麼如果能想出下面這種解法,估計面試官也會為你點讚。這種方法的雖然不滿足常數空間的要求,但是作為對暴力搜尋的優化,也是一種非常好的解題思路。這個解法的思路是建立兩個陣列,forward陣列和backward陣列,其中forward[i]表示[0, i]之間最小的數,backward[i]表示[i, n-1]之間最大的數,那麼對於任意乙個位置i,如果滿足 forward[i] < nums[i] < backward[i],則表示這個遞增三元子串行存在,舉個例子來看吧,比如:
nums: 8 3 5 1 6
foward: 8 3 3 1 1
backward: 8 6 6 6 6
我們發現數字5滿足forward[i] < nums[i] < backward[i],所以三元子串行存在。
參考:
class solution(object):
def increasingtriplet(self, nums):
""":type nums: list[int]
:rtype: bool
"""one = float("inf")
two = float("inf")
for num in nums:
if num <= one:
one = num
elif num <= two:
two = num
else:
return true
return false
遞增三元子串行LeetCode334
題目 給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子串行.數學表示式如下 如果存在這樣的 i,j,k,且滿足 0 i j k n 1,使得 arr i arr j arr k 返回 true 否則返回 false 說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 分析 ...
Leetcode 334 遞增的三元子串行
給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子串行。數學表示式如下 如果存在這樣的 i,j,k,且滿足 0 ij k n 1,使得 arr i arr j arr k 返回 true 否則返回 false 說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 示例 1 輸入...
LeetCode 334 遞增的三元子串行
給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子串行。數學表示式如下 如果存在這樣的 i,j,k,且滿足 0 i j k n 1,使得 arr i arr j arr k 返回 true 否則返回 false 說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 示例 1 輸...