Leetcode 334 遞增的三元子串行

2021-10-07 12:05:07 字數 908 閱讀 7811

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

題目要求用 o(n) 的演算法,確實不是那麼容易想到。

整個的演算法思想是,維持 small 和 mid 兩個值,分別表示最小值和中間值。遍歷陣列,如果當前元素 num 小於等於 small, 那麼將 small 更新為 num;如果 num 小於等於 mid 將, mid 更新為 num。如果 num > mid, 那麼就已經找到和要求的三元組了。

首先,第乙個問題:為什麼要更新 small 為 num 呢?(在當前元素 num 小於等於 small 的前提下)

如:[4, 5, 1, 2, 3], 當前 small 為 4, mid 為 5,num 為 1,為了不漏掉解 , 需要將 small 更新為 num。

第二個問題:更新了 small 後,small 和 mid 的相對位置不對了,怎麼辦?

其實是不影響的,因為存在乙個比 small 大比 mid 小的前最小值在 mid 之前,如: [4, 5, 1, 6], 當前 small 為 2, mid = 5, num = 6, 出現了比 mid 大的數 6,那麼 依然是一組解。

class solution 

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 輸...