1. 程式人生 > 其它 >2021-2022-1 20211405《資訊保安專業導論》第3周學習總結

2021-2022-1 20211405《資訊保安專業導論》第3周學習總結

連結

給你一個整數陣列 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;
    }
}
心之所向,素履以往 生如逆旅,一葦以航