leetcode 300 最長上公升子串行

2021-09-02 17:25:35 字數 914 閱讀 6548

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

示例:   輸入:[10,9,2,5,3,7,101,18]輸出:4解釋:最長的上公升子串行是[2,3,7,101],它的長度是4

說明:

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

解法1:動態規劃空間複雜度o(n) 時間複雜度o(n^2)

我們維護乙個一維dp陣列,其中dp[i]表示以nums[i]為結尾的最長遞增子串的長度,對於每乙個nums[i],我們從第乙個數再搜尋到i,如果發現某個數小於nums[i],我們更新dp[i],更新方法為dp[i] = max(dp[i], dp[j] + 1),即比較當前dp[i]的值和那個小於num[i]的數的dp值加1的大小,我們就這樣不斷的更新dp陣列,到最後dp陣列中最大的值就是我們要返回的的長度。

public int lengthoflts(int nums)

}res = math.max(res, dp[i]);

}return res;

}

解法2:二分查詢

public int lengthoflis(int nums) else

}return lastidx + 1;

}public void binaryset(int nums, int start, int end, int targetelse

}nums[start] = target;

}

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 嗎?動態規劃 o n 2 的狀態很好定義 dp i 表示以...