频道栏目
首页 > 资讯 > 其他 > 正文

300. Longest Increasing Subsequence“编程题”

17-11-16        来源:[db:作者]  
收藏   我要投稿

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

For example,
Given [10, 9, 2, 5, 3, 7, 101, 18],
The longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4. Note that 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?

方法一: O(n^2) dynamic programming
state equation, 不仅取决于前一时刻的状态,而是取决于前一段时间里的最小值或者最大值。常见的O(n^2)dp.

int lengthOfLIS(vector& nums) {
    int len = nums.size();
    int ans = 0;
    vector dp(len, 0);
    for (int i = 0; i < len; i++) {
        int maxval = 0;
        for (int j = 0; j < i; j++) {
            if (nums[i] > nums[j]) {
                maxval = max(maxval, dp[j]);
            }
        }
        dp[i] = maxval + 1;
        ans = max(ans, dp[i]);
    }
    return ans;
}
相关TAG标签
上一篇:Android之基于viewPager画廊实现方法
下一篇:Android 图像视图ImageView使用教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站