题目描述:

  • 编程之美2.16中,求数组最长递增子序列的长度,例如数组为:1,-1,2,-3,4,-5,6,-7,那么最长递增序列是:1,2,4,6,长度是4.
  • 可以看出,子序列不一定是连续的

解题思路:

  • 动态规划问题;
  • 使用 i 表示向前遍历的位置,当 i=1时,序列为 1,长度为1;
  • 当 i=2时,序列为 1 或者 -1,长度仍为1;
  • 当 i=3时, 序列为 1,2或者 -1,2,长度为2;
  • 因此,初始化最大长度为1,以第i个元素结尾的最长子序列的长度为 max(ret[j] + 1, ret[i])
  • 时间复杂度为O(n*n)
int LIS(vector<int> & nums)
{int n = nums.size();vector<int> ret(n, 1);for(int i = 0; i < n; ++i){for(int j = 0; j < i; ++j){if(nums[i] > nums[j] && ret[j] + 1 > ret[i])ret[i] = ret[j] + 1;}}for(int i = 1; i < n; ++i){if(ret[i] < ret[i - 1])swap(ret[i], ret[i - 1]);}return ret[n - 1];
}

最长递增子序列的和:

def Sum(A):n = len(A)ret = []for i in range(n):ret.append(A[i])for i in range(1,n):for j in range(i):if A[i] > A[j] and ret[j] + A[i] > ret[i]:ret[i] = ret[j] + A[i]#print A[i]return max(ret)

最长递增子序列的长度(编程之美)相关推荐

  1. 求数组中最长递增子序列的长度

    题目:写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度. 例:在序列[1, -1, 2, -3, 4, -5, 6, -7]中,其最长递增子序列的长度为4([1, 2, ...

  2. c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度

    改进的方法看的头大了却还是不清楚,哎...搞算法的苦啊,纠结啊. 编程之美这本书里面就有关于这道题的一些解法,求一个一位数组中的最长序列的长度.例如,在序列1,3,2中,最长递增序列是1,3. 这道题 ...

  3. python最大连续递增子列_最长递增子序列(LIS)解法详述

    求数组中最长递增子序列(Longest Increasing Subsequence, LIS) LIS问题是算法中的经典题目,传统的解法是使用动态规划,时间复杂度是O(n^2):改进的方法时间复杂度 ...

  4. 跟着编程之美学算法——最长递增子序列(转)

    之前学习了动态规划中最基本的问题,最长公共子序列,具体解法,见前前一篇博客: http://www.cnblogs.com/liyukuneed/archive/2013/05/22/3090597. ...

  5. 严格递增和非严格递增最长递增子序列长度

    严格递增 最长递增子序列,给定一个无序整数数组nums(字符串也可以,不重要),给出最长严格递增子序列的长度.比如输入[1, 2 , 1, -1, 1, 4, 0],输出3,最长递增子序列[1, 2, ...

  6. [网络流24题] 最长递增子序列

    [网络流24题] 最长递增子序列 «问题描述: 给定正整数序列x1,..., xn. (1)计算其最长递增子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的递增子序列. (3)如果允 ...

  7. 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串 (转)...

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497. 声明:版权所有,转载请注明出处,谢谢 ...

  8. 动态规划设计方法详解最长递增子序列

    很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想. 最长递增子序列(Lon ...

  9. 每日一题(79) - 求数组中最长递增子序列

    题目来自编程之美 题目 思路(1) 动态规划(复杂度为n^2) 方程: F[i]:表示以nArr[i]为结尾的最长递增子序列的最大长度. F[i] = Max(F[j]) + 1 && ...

最新文章

  1. 使用Gradle整合SpringBoot+Vue.js-开发调试与打包
  2. zabbix之微信告警(python版):微信个人报警,微信企业号告警脚本
  3. B2c商城图片尺寸设定研究 尺寸应该多大合适
  4. EasyUI-DataGrid之批量删除
  5. jzoj4485-[GDOI 2016 Day1]第一题 中学生数学题【数学】
  6. deepin安装java_Deepin安装Eclipse
  7. C# 6.0 (C# vNext) 的新功能:Exception-Handling Improvements
  8. 从零开始学keras之多分类问题
  9. 列式存储ClickHouse(二)接口
  10. Ubantu16.04LTS麒麟版:取消登录界面的客人回话
  11. d1800芯片_基于D1800的收音/对讲机设计制作
  12. Android开机启动广播
  13. 背包那些经典的例子( 上 )
  14. 2020年个人所得税计算方法(附带计算器)
  15. 淘宝内乱持续 QQ盛大京东“趁火打劫”
  16. 如何使用js懒加载图片|如何使用jquery.lazyload.js|网页优化|如何提高网页加载速度
  17. Java学习笔记 (韩顺平循序渐进学Java零基础篇)——01
  18. ES6语法总结(21)--Generator函数的异步应用
  19. 计算机系统使用的cd-rom,如何将CD-ROM的内容复制到计算机[复制]
  20. 常见滤波汇总(KF、EKF、UKF和PF)

热门文章

  1. asp.net确认对话框_在ASP.NET或Trace.Fail中防止服务器端对话框被认为有害
  2. 一次对JDK进行减肥的记录
  3. ZEDmini在Jetson AGX Xavier中使用ROS运行
  4. Python基于Django停车场预约停车计费系统设计
  5. boost::any实现分析
  6. [中国企业报]小灵通“末路”
  7. 不良资产处置(五):不同国家不良资产处置案例分析
  8. Flink大数据实时计算系列-Flink的Sliding Windows使用
  9. 2019ACM西安邀请赛总结
  10. 意法半导体(ST)加入RT-Thread会员计划,正式成为金牌会员