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

贪心算法day2(最长递增子序列)

目录

1.最长递增子序列

方法一:动态规划 

方法二:贪心+二分查找


1.最长递增子序列

链接:. - 力扣(LeetCode)

方法一:动态规划 

思路:我们定义dp[i]为最长递增子序列,那么dp[j]就是在小于i范围内的最长子序列,最长子序列最少为1,所以dp数组初始化为1.代码实行步骤如下:

这种情况下时间复杂度为O(n*2) ,空间复杂度为 O(n)

具体实现如下:

class Solution {public int lengthOfLIS(int[] nums) {int n = nums.length;int[] dp = new int[n];for(int i = 0; i < n; i++){dp[i] = 1;}int ret = 1;for(int i = 1; i < n ; i++){for(int j = 0; j < i ;j++){if(nums[j] < nums[i]){dp[i] = Math.max(dp[j] + 1,dp[i]);ret = Math.max(ret,dp[i]);}}}return ret;}
}

方法二:贪心+二分查找

思路:我们用数组来举个例子

第二种情况:(ret.get(mid) > nums[i])

这种情况下时间复杂度为nlogN(二分查找的时间复杂度为logN),空间复杂度为O(n)

代码: 

 public static int lengthOfLIS(int[] nums){int n = nums.length;ArrayList<Integer> ret = new ArrayList<>();ret.add(nums[0]);for (int i = 0; i < n; i++) {if(nums[i] > ret.get(ret.size() - 1)){ret.add(nums[i]);}else{int left = 0,right = ret.size() - 1;while(left < right){int mid = (left + right)/2;if(ret.get(mid) < nums[i]){left = mid + 1;}else{right = mid;}}ret.set(left,nums[i]);}}return ret.size();}

http://www.lryc.cn/news/480902.html

相关文章:

  • arcgis pro 学习笔记
  • OpenGL 进阶系列06 - OpenGL变换反馈(TransformFeedback)
  • elementUI 点击弹出时间 date-picker
  • 【浙江大学大模型系列】启真医疗大模型(国内大模型)
  • NestJS 项目中如何使用 class-validator 进行数据验证
  • 【AI抠图整合包及教程】Meta SAM2:引领图像和视频分割技术的新纪元
  • 小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统
  • ArcGIS/QGIS按掩膜提取或栅格裁剪后栅格数据的值为什么变了?
  • Linux的基本指令(一)
  • python导入包失败 in <module> import pandas as pd
  • 不惧风雨,硬核防护!雷孜LaCie小金刚三防移动硬盘颠覆认知
  • Yocto 项目下通过网络更新内核、设备树及模块
  • Scheduled Sampling工作原理【小白记笔记】
  • C++:C++的IO流
  • 「QT」几何数据类 之 QLine 整型直线类
  • day58 图论章节刷题Part09(dijkstra(堆优化版)、Bellman_ford 算法)
  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(1)
  • 智能出行助手:SpringBoot共享汽车管理平台
  • 【月之暗面kimi-注册/登录安全分析报告】
  • Flink实现实时数据处理
  • 11.9.2024刷华为
  • Chromium 中chrome.system.storage扩展接口定义c++
  • 【Qt聊天室客户端】登录窗口
  • 如何显示模型特征权重占比图【数据分析】
  • Ubuntu24安装MySQL
  • 微服务架构面试内容整理-Eureka
  • qt QErrorMessage详解
  • SpringBoot 将多个Excel打包下载
  • 分页存储小总结
  • Star-CCM+应用篇之动力电池温度场仿真操作流程与方法