国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[LeetCode] 300. Longest Increasing Subsequence

luckyyulin / 1614人閱讀

Problem

Given an unsorted array of integers, find the length of longest increasing subsequence.

Example:

Input: [10,9,2,5,3,7,101,18]
Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.

Note:

There may be more than one LIS combination, it is only necessary for you to return the length.
Your algorithm should run in O(n2) complexity.

Follow up:

Could you improve it to O(n log n) time complexity?

Solution using Arrays.binarySearch(int[] array, int start, int end, int target)
class Solution {
    public int lengthOfLIS(int[] nums) {
        int len = 0;
        //use Arrays.binarySearch() to find the right index of to-be-inserted number in dp[]
        int[] dp = new int[nums.length];
        for (int num: nums) {
            int index = Arrays.binarySearch(dp, 0, len, num);
            if (index < 0) {
                //calculate the right index in dp[] and insert num
                index = -index-1;
                dp[index] = num;
            }
            //if last inserted index equals len, increase len by 1
            //reason: index is 0-based, should always keep: len == index+1
            if (index == len) len++;
        }
    }
}
Define a binary search method
class Solution {
    public int lengthOfLIS(int[] nums) {
        if (nums == null || nums.length == 0) return 0;
        int index = 0;
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        for (int i = 1; i < nums.length; i++) {
            int pos = findPos(dp, nums[i], index);
            if (pos > index) index = pos;
            dp[pos] = nums[i];
        }
        return index+1;
    }
    private int findPos(int[] nums, int val, int index) {
        int start = 0, end = index;
        while (start+1 < end) {
            int mid = start+(end-start)/2;
            if (nums[mid] == val) return mid;
            else if (nums[mid] < val) start = mid;
            else end = mid;
        }
        if (nums[end] < val) return end+1;
        else if (nums[start] < val) return end;
        else return start;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77217.html

相關(guān)文章

  • LeetCode[300] Longest Increasing Subsequence

    摘要:再用二分法找當(dāng)前值應(yīng)該在排好序的數(shù)組中的插入位置。因?yàn)橐业氖亲铋L的序列,所以每次將排好序的數(shù)組中替換成已經(jīng)排好序的,會能保證得到的結(jié)果是最長的。保證升序相等也要替換這個(gè)值 LeetCode[300] Longest Increasing Subsequence Given an unsorted array of integers, find the length of longe...

    blankyao 評論0 收藏0
  • leetcode 300. Longest Increasing Subsequence

    摘要:題目要求找到整數(shù)數(shù)組中最長的遞增子數(shù)組。該子數(shù)組可以為不連續(xù)的。如題目中例子所示,得到的最長子數(shù)組為。最后我們還需要遍歷一遍全部子數(shù)組的長度并獲得最大的長度。 題目要求 Given an unsorted array of integers, find the length of longest increasing subsequence. For example, Given [...

    eechen 評論0 收藏0
  • leetcode-300-Longest Increasing Subsequence

    摘要:本質(zhì)找出最長的遞增子序列的長度,可以是不連續(xù)的。應(yīng)用判斷滿足一定條件的子序列的最大長度,用動態(tài)數(shù)組加以處理。二分法確定滿足條件的位置。類似二分法查找元素,查找某種情況的子序列。 本質(zhì): 找出最長的遞增子序列的長度,可以是不連續(xù)的。 用一個(gè)數(shù)組存儲 遞增子序列,遍歷原始數(shù)組,每增加一個(gè)數(shù),往里添加到對應(yīng)的順序,記錄他的位置,即為此數(shù)組的長度。 成立的理由:每一個(gè)數(shù)添加以后,都有對...

    amc 評論0 收藏0
  • [leetcode]Longest Increasing Subsequence

    摘要:對于一個(gè)遞增子序列,想要增加它的長度,就必須在尾部添加一個(gè)更大的值。表示以結(jié)尾的最長遞增序列的長度。長度增加的條件就是一個(gè)數(shù)字比大。長度最大值即為輸入數(shù)組的長度。 Given an unsorted array of integers, find the length of longest increasing subsequence. For example, Given [10,...

    wow_worktile 評論0 收藏0
  • Longest Increasing Subsequence

    摘要:題目鏈接主要兩種方法和用,就是每次找出為結(jié)尾的最長的串的長度就好了。所以分解成就是,這個(gè)復(fù)雜度是。用一個(gè)數(shù)組,表示的長度為,表示長度為的,最右邊的可能的最小值。這里只要求長度即可,那就直接用就可以了,整個(gè)用個(gè)數(shù)組就行了。 Longest Increasing Subsequence 題目鏈接:https://leetcode.com/problems... 主要兩種方法:dp和gree...

    FullStackDeveloper 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<