LeetCode 300 最長上公升子串行

2021-10-01 13:57:48 字數 1641 閱讀 6847

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。

示例:

輸入:[10

,9,2

,5,3

,7,101,18

]輸出:

4 解釋: 最長的上公升子串行是 [2,

3,7,

101],它的長度是 4。

說明:

高階: 你能將演算法的時間複雜度降低到 o(n

logn

)o(n log n)

o(nlog

n)嗎?這是乙個子串行問題子串行問題基本都可以歸化為「動態規劃」問題。

動態規劃 + 二分:高階要求時間複雜度要求o(n

logn

)o(nlogn)

o(nlog

n),立馬想到二分。這個思路比較巧妙,很具小巧思。

總之,思想就是cell中儲存比較小的元素。這樣,cell未必是真實的最長上公升子串行,但長度是對的。

動態規劃

class

solution

res =

max(res, dp[i]);

}return res;}}

;

動態規劃 + 二分(之前寫的二分,不好,需要判斷很多邊界條件)

class

solution

int low =

0, high = res.

size()

-1;int pos =

binarysearch

(res, low, high, nums[i]);

if(pos ==-1

)continue

; res[pos]

= nums[i];}

return res.

size()

;}intbinarysearch

(vector<

int>

& res,

int low,

int high,

int k)

return-1

;}};

按照模板寫的二分(推薦)

class

solution

int left =

0, right = res.

size()

-1;int pos =

binarysearch

(res, left, right, nums[i]);

res[pos]

= nums[i];}

return res.

size()

;}// 首先要明確我們的目的是要找第乙個「大於等於k」的元素的下標

intbinarysearch

(vector<

int>

& res,

int left,

int right,

int k)

return left;}}

;

LeetCode300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 題目分析 方法一 動態規劃,用dp i 表示以nums i 結尾的最長上公升子串行。那麼如何求dp i 呢,只要看n...

Leetcode 300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 高階 你能將演算法的時間複雜度降低到 o n log n 嗎?解題思路 1.普通演算法 動態規劃。假設陣列的前n個數...

leetcode 300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 高階 你能將演算法的時間複雜度降低到 o n log n 嗎?解法1 動態規劃空間複雜度o n 時間複雜度o n 2...