当前位置: 首页 > news >正文

最长递增子序列 java_动态规划深入6 最长递增子序列

也就是不需要连续,只要暗藏递增序列就累加起来。

我一开始以为必须连续的,题目没看清就写了,尴尬。后来仔细一看,不对。

然后经过仔细研究题目发现,这就是一道比较简单的动态规划的题目。和前面写的题目都有些相似,所以建模一下子就建立出来了。

用一个dp数组存放每个位置的最优解。

状态传递式就是:当array[i]>array[j]时,就dp[i]=dp[j]+1;其中j是遍历小于i的位置。然后记住最大的dp[i]就ok了。

然后来看我写的代码:

public static void main(String[] args) {

int[] array = { 10, 9, 2, 5, 3, 7, 101, 1, 18 };

int len = getLongthOfLIS(array);

System.out.println(len);

}

private static int getLongthOfLIS(int[] array) {

int[] dp = new int[array.length];

dp[0] = 1;

int result = 1;

for (int i = 1; i < dp.length; i++) {

int max = 1;// 局部变量max用于存储dp[i]上的最大值,最后再传递给dp[i]

dp[i] = 1;// 所有dp[i]必须初始化为1,不然默认为0,然后输出的时候你就发现不对了

for (int j = i; j >= 0; j--) {

if (array[i] > array[j]) {

dp[i] = dp[j] + 1;

if (max < dp[i]) {

max = dp[i];// 取出最大的dp[i]

}

}

}

dp[i] = max;// 最后的时候进行赋值

if (result < dp[i]) {

result = dp[i];// 这里直接有个全局变量,用于当作返回值

}

}

System.out.println(Arrays.toString(dp));// 输出数组,测试是否正确

return result;

}

刚开始的时候脑子有点抽了,总觉得应该更简单,就不愿意写复杂,结果半小时没写出来,然后还是老老实实地定义变量,双重遍历,不断比较取出最大值。把思路非常清晰地表达出来很重要,看清题目很重要。

对了,我看网上很多人的第二个for循环和我写的不太一样。就是比如:

for(int j=0;j

if(array[j]list[i]){

list[i] = list[j]+1;

}

}

里面用了个逻辑与的运算,先判断是否可以加1,然后判断是否比原来的dp[i]大,全部符合条件了再赋值dp[i],其实这样的话,思路和我的差不多,只不过我定义了临时变量存储了最大值,所以我感觉我的看起来更容易看懂,但是没有他们的这么简洁。各有各的优势吧。

欢迎交流讨论。

相关文章:

  • yml mysql参数_yml配置--给参数设置默认值
  • ant java eclipse_(转)Eclipse中使用Ant
  • java json merge_JavaScript 如何合并两个Json对象
  • java setselectionend_Java Gallery.setSelection方法代码示例
  • stringbuffer java API_StringBuffer类
  • jasperreport java数据_ireport5.6.0+jasperreports 使用java对象做为数据源导出excel或者Pdf...
  • 与时间相关的java源码_JAVA的Date类与Calendar类
  • Java修改文件扩展属性_扩展PropertyPlaceholderConfigurer对prop文件中的属性加密(修正1)...
  • java定义显性构造函数_Java基础之三、类的特性和接口
  • mysql用其他表更新_mysql用一个表更新另一个表
  • java maven 打包jar_maven 打包可执行 jar包 java application 方法
  • java专业考独立本科_复旦大学-计算机网络(独立本科B080709)(停考过渡)
  • java 自定义组件状态改变事件_Swing自定义事件-一个组件的事件传递给另一个组件...
  • 迁移到php7,PHP扩展迁移为PHP7扩展兼容性问题记录
  • ubuntu 18.04安装php 7,Ubuntu 18.04安装和配置PHP 7.2详细方法介绍
  • 《剑指offer》分解让复杂问题更简单
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Consul Config 使用Git做版本控制的实现
  • dva中组件的懒加载
  • mysql innodb 索引使用指南
  • MySQL主从复制读写分离及奇怪的问题
  • Nodejs和JavaWeb协助开发
  • npx命令介绍
  • overflow: hidden IE7无效
  • SSH 免密登录
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • text-decoration与color属性
  • vuex 学习笔记 01
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 初识MongoDB分片
  • 对象引论
  • 聊聊redis的数据结构的应用
  • 前端面试总结(at, md)
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用docker-compose进行多节点部署
  • 用element的upload组件实现多图片上传和压缩
  • 正则表达式
  • #1014 : Trie树
  • #大学#套接字
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (floyd+补集) poj 3275
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • .equals()到底是什么意思?
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET下ASPX编程的几个小问题
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!