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

贪心算法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.kler.cn/a/386399.html

相关文章:

  • Spring Cloud Gateway(分发请求)
  • SHA-256哈希函数
  • Oracle ADB 导入 BANK_GRAPH 的学习数据
  • 从社交媒体到元宇宙:Facebook未来发展新方向
  • UDP协议和TCP协议之间有什么具体区别?
  • 【mysql】使用宝塔面板在云服务器上安装MySQL数据库并实现远程连接
  • 常见插入排序算法的实现(直接插入排序与希尔排序)
  • 虚拟化负载均衡至少需要几台服务器?
  • Linux服务器网络故障排查命令
  • 【前端】Svelte:事件处理
  • Node.js——fs模块-文件重命名和移动
  • 【Django】配置文件 settings.py
  • shodan4(泷羽sec)
  • STM32——毕设基于单片机的多功能节能窗控制系统
  • JavaWeb合集23-文件上传
  • kafka 安装和使用
  • vue3+vite 前端打包不缓存配置
  • Spring中的过滤器和拦截器
  • ORU——ORAN 无线电单元参考架构
  • GPU 服务器厂家:挑战与机遇交织,开拓未来计算之路
  • Tencent Hunyuan3D
  • mysql做数据统计图表常用的sql语句 部门人数 工龄 学历 年龄 性别 在职人员 兴趣分析查询
  • Python-利用Pyinstaller,os库编写一个无限弹窗整蛊文件(上)
  • 家庭财务管理系统|基于java和小程序的家庭财务管理系统设计与实现(源码+数据库+文档)
  • 华为eNSP:AAA认证(pap和chap)telnet/ssh
  • 乐尚代驾十订单支付seata、rabbitmq异步消息、redisson延迟队列