美文网首页Leetcode
Leetcode.300.Longest Increasing

Leetcode.300.Longest Increasing

作者: Jimmy木 | 来源:发表于2020-01-08 15:16 被阅读0次

    题目

    给定一个无序整型数组, 找出最大的递增子序列的长度.

    Input: [10, 9, 2, 5, 3, 7, 101, 18]
    Output: 4  // [2,3,7,101]
    

    思路1

    递归.

    int lengthOfLISHelper(vector<int>& nums, int flag, int pos) {
        if (pos >= nums.size()) return 0;
        int count = 0;
        if (nums[pos] > flag) {
            count = lengthOfLISHelper(nums, nums[pos], pos+1) + 1;
        }
        int nextCount = lengthOfLISHelper(nums, flag, pos+1);
        return max(nextCount, count);
    }
    
    int lengthOfLIS(vector<int>& nums) {
        return lengthOfLISHelper(nums, INT_MIN, 0);
    }
    

    思路2

    DP.

    int lengthOfLIS2(vector<int>& nums) {
        if (nums.empty()) return 0;
        // 记录nums[i]的最大子序列个数
        vector<int> dp(nums.size());
        int count = 1;
        dp[0] = 1;
    
        for (int i = 1; i < nums.size(); i++) {
            int maxCount = 0;
            for (int j = 0; j < i; j++) {
                if (nums[j] < nums[i]) {
                    maxCount = max(maxCount, dp[j]);
                }
            }
            dp[i] = maxCount + 1;
            count = max(count, dp[i]);
        }
        return count;
    }
    

    总结

    求最值, 优先考虑使用DP. 熟练掌握递归思想, 递归难以理解, 但是可以熟能生巧.

    相关文章

      网友评论

        本文标题:Leetcode.300.Longest Increasing

        本文链接:https://www.haomeiwen.com/subject/rkrsactx.html