2021-2022-1 20211405《資訊保安專業導論》第3周學習總結
阿新 • • 發佈:2021-10-10
給你一個整數陣列 nums ,找到其中最長嚴格遞增子序列的長度。
子序列是由陣列派生而來的序列,刪除(或不刪除)陣列中的元素而不改變其餘元素的順序。例如,[3,6,2,7] 是陣列 [0,3,1,6,2,2,7] 的子序列。
心之所向,素履以往 生如逆旅,一葦以航class Solution { private int search(int[] dp, int length, int key) { int l = 0, r = length - 1; while (l <= r) { int mid = (l + r) >> 1; if (dp[mid] < key) { l = mid + 1; } else { r = mid - 1; } } return l; } public int lengthOfLIS(int[] nums) { if (nums == null || nums.length == 0) { return 0; } int n = nums.length; int length = 1; int[] dp = new int[n]; dp[0] = nums[0]; for (int i = 1; i < n; ++i) { int index = search(dp, length, nums[i]); dp[index] = nums[i]; if (index == length) { length = index + 1; } } return length; } }