Leetcode 刷题 动态规划 子序列问题

news2024/12/23 11:06:14

300. 最长递增子序列

首先明确什么是子序列

子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序

不一定要连续 可以删除部分元素 但是要保证相对顺序

1. dp[i]的定义

        dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度

2. 状态转移方程

if(nums[i] > nums[j]){
   dp[i] = Math.max(dp[i], dp[j] + 1);
}

 注意这里不是要dp[i] 与 dp[j] + 1进行比较,而是我们要取dp[j] + 1的最大值

3. dp[i]的初始化

        每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1.

4. 确定遍历顺序

        从前向后遍历

5. 举例推导dp数组

class Solution {
    public int lengthOfLIS(int[] nums) {
        int[] dp = new int[nums.length];
        Arrays.fill(dp, 1);

        for(int i = 1; i < nums.length; i++){
            for(int j = 0; j < i; j++){
                if(nums[i] > nums[j]){
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
        }
        int res = Integer.MIN_VALUE;
        for(int num : dp){
            res = Math.max(res, num);
        }
        return res;
    }
}

 

674. 最长连续递增序列

这题难度一下子就小了

本题要求的是最长连续递增序列  === 子数组

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int[] dp = new int[nums.length];
        Arrays.fill(dp, 1);

        for(int i = 1; i < nums.length; i++){
            if(nums[i] > nums[i-1]){
                dp[i] = dp[i-1] + 1;
            }
        }

        int res = Integer.MIN_VALUE;
        for(int num : dp){
            res = Math.max(res, num);
        }

        return res;
    }
}

本题也可以用贪心来做

public static int findLengthOfLCIS(int[] nums) {
    if (nums.length == 0) return 0;
    int res = 1; // 连续子序列最少也是1
    int count = 1;
    for (int i = 0; i < nums.length - 1; i++) {
        if (nums[i + 1] > nums[i]) { // 连续记录
            count++;
        } else { // 不连续,count从头开始
            count = 1;
        }
        if (count > res) res = count;
    }
    return res;
}

718. 最长重复子数组

题目中说的子数组,其实就是连续子序列。

1. 确定dp数组(dp table)以及下标的含义

         dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]

2. 确定递推公式

 if(nums1[i-1] == nums2[j - 1]){
       dp[i][j] = dp[i-1][j-1] + 1;
}
class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int[] dp = new int[nums.length];
        Arrays.fill(dp, 1);

        for(int i = 1; i < nums.length; i++){
            if(nums[i] > nums[i-1]){
                dp[i] = dp[i-1] + 1;
            }
        }

        int res = Integer.MIN_VALUE;
        for(int num : dp){
            res = Math.max(res, num);
        }

        return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/702352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hutool 30

Hutool是一个Java工具包&#xff0c;提供了丰富的工具类库和简化开发的工具方法。它的目标是提供一套丰富、实用、高效和易用的Java工具类&#xff0c;以提升开发者的开发效率和开发质量。以下是Hutool的一些主要特点和功能模块&#xff1a; 常用工具类&#xff1a;Hutool提供了…

【Linux | Shell命令】bash shell 进程、磁盘、排序命令

目录 一、概述二、进程相关命令2.1 ps 命令 三四五 一、概述 上篇文章 bash shell 基础命令 中&#xff0c;介绍了一些与目录、文件相关的 shell 命令&#xff0c;本文继续介绍其他与进程、磁盘、排序、归档相关的命令&#xff0c;读者可以在自己的Linux系统下&#xff0c;实操…

【AI赋能未来】一文带你了解生成对抗网络(GAN)

自我介绍⛵ &#x1f4e3;我是秋说&#xff0c;研究人工智能、大数据等前沿技术&#xff0c;传递Java、Python等语言知识。 &#x1f649;主页链接&#xff1a;秋说的博客 &#x1f4c6; 学习专栏推荐&#xff1a;MySQL进阶之路、C刷题集、网络安全攻防姿势总结 欢迎点赞 &…

shiro框架 02使用shiro进行用户的认证

01.shiro框架的具体业务&#xff1a; 具体的内部结构: Subject&#xff08;主体&#xff09;:与软件交互的一个特定的实体&#xff08;用户、第三方服务等&#xff09;。 SecurityManager(安全管理器) :Shiro 的核心&#xff0c;用来协调管理组件工作。 其中的&#xff1a; Au…

小研究 - Java 指针分析综述(二)

近年来静态程序分析已成为保障软件可靠性、安全性和高效性的关键技术之一. 指针分析作为基 础程序分析技术为静态程序分析提供关于程序的一系列基础信息&#xff0c;例如程序任意变量的指向关系、变量 间的别名关系、程序调用图、堆对象的可达性等. 介绍了 Java 指针分析的重要…

亚马逊云科技积极探索多样化生态合作模式,助力实现可持续发展愿景

2023年6月26日&#xff0c;亚马逊云科技中国峰会在上海世博中心盛大开幕&#xff01;以主题“因构建 而可见”为大家拉开帷幕。当前&#xff0c;越来越多的企业客户&#xff0c;以及当地政府监管机构对企业的要求&#xff0c;都需要企业告知碳足迹&#xff0c;亚马逊云科技提供…

优盘数据恢复怎么做?3个方法分享!

我的优盘里保存了很多有纪念意义的照片&#xff0c;但是刚刚将u盘插入电脑后&#xff0c;发现有些照片已经损坏了。我想将优盘里的数据恢复&#xff0c;有什么靠谱的方法吗&#xff1f;给我推荐一下吧&#xff01; 优盘是一种便携式存储设备&#xff0c;常用于存储和传输数据。…

Java-API简析_java.lang.Thread类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131467981 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

九类AI应用和五个简单LLM的Prompt技巧

一、九类AI应用 AI艺术&#xff1a;造梦日记、MidJourney、Stable Diffusion、Adobe、Stability、Remove AI聊天&#xff1a;ChatGPT、Discord、文心一言、Google Bard、星火、Character.Al AI社区&#xff1a;Kaggle、Hugging Face、H20、Github、Replicate、OpenCV AI创造…

chatgpt赋能python:Python随机打乱列表:如何使用Python打乱您的数据?

Python随机打乱列表&#xff1a;如何使用Python打乱您的数据&#xff1f; 在数据处理中&#xff0c;列表是一种常见的数据结构。然而&#xff0c;当数据量很大时&#xff0c;列表的排序方式也变得重要。为了更好地处理数据&#xff0c;我们需要知道如何使用Python打乱列表。 …

k8s操作命令

系列文章目录 文章目录 系列文章目录一、k8s基础命令1.陈述式资源管理方法&#xff1a;2.基础命令 总结 一、k8s基础命令 1.陈述式资源管理方法&#xff1a; 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具…

项目——学生信息管理系统2

目录 用户类型&#xff0c;我们创建一个枚举类 在 org.xingyun.model 包下创建 UserType 枚举类 快速生成 get set 方法 修改代码&#xff0c;下拉框的内容&#xff0c;用我们的枚举类型 给登录按钮绑定事件 我们在 org.xingyun.utils 包下创建一个工具类 Eclipse 智能提…

【Java基础】volatile关键字

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做过日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览2.1 作用2.2 多线程共享变量的访问流程2.3 多线…

EMC学习笔记(十二)跨分割区及开槽的处理

跨分割区及开槽的处理 1.开槽的产生1.1 对电源/地平面分割造成的开槽1.2 通孔过于密集形成开槽 2.开槽对PCB板EMC性能的影响2.1 高速信号与低速信号的面电流分布2.2 分地的概念2.3 信号跨越电源平面或地平面上的开槽的问题 3.对开槽的处理3.1 需要严格的阻抗控制的高速信号线&a…

基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化

目录 项目介绍研究背景国内外研究现状分析研究目的研究意义研究总体设计数据获取网络爬虫介绍豆瓣电影数据的采集 数据预处理数据导入及环境配置Flume介绍Hive介绍MySQL介绍Pyecharts介绍环境配置及数据加载 大数据分析及可视化豆瓣影评结构化分析豆瓣电影类型占比分析豆瓣电影…

Vector - CAPL - 常见缩写词

我们在CAPL脚本开发过程中&#xff0c;为了表示的方便&#xff0c;我们会使用大量的缩写词&#xff0c;为了方便自己的使用&#xff0c;大家也可作为参考使用&#xff0c;这里就整理出来一部分常用缩写&#xff0c;以及中英文注释。 CAPL开发中常见缩写 缩写英文解释中文ABSA…

数据安全系列(二)丨数据分类分级

1 数据分类分级的依据 2016年11月&#xff0c;《网络安全法》明确将“数据分类”作为网络安全保护法定义务之一。 2021年9月&#xff0c;《数据安全法》再次具体确立了“数据分类分级保护制度”及其基本原则。 《数据安全法》 第二十一条 国家建立数据分类分级保护制度&am…

Ansible与Shell结合使用

利用Shell脚本运行Ansible命令&#xff1a; 本实验采用rhel8.3。这次将使用 yum_repository 模块远程写入仓库配置。 写入仓库&#xff1a; Shell脚本&#xff1a; #!/bin/bashansible dev -m yum_repository -a namemyBase description"myTestRepo \ baseurl"/m…

物联网的未来:连接万物的智能世界

第一章&#xff1a;引言 在当今数字化时代&#xff0c;物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;已经成为了人们生活中不可或缺的一部分。物联网技术的快速发展和广泛应用&#xff0c;将为我们带来一个连接万物的智能世界。本文将探讨物联网的未来发展…

内核态与用户态详解(嵌入式学习)

内核态与用户态 内核态概念特点和功能 用户态概念特点和功能 内核态与用户态如何切换&#xff1f;总结 内核态 概念 内核态&#xff08;Kernel Mode&#xff09;是计算机操作系统中的一种特权级别或运行模式。在内核态下&#xff0c;操作系统拥有最高的权限和访问系统资源的能…