leetcode334 遞增的三元子串行

2021-10-01 12:59:59 字數 1227 閱讀 8989

給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 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 輸...