代码随想录算法训练营第四十九天|LeetCode300 最长递增子序列、LeetCode674 最长连续递增序列、LeetCode718 最长重复子数组

题1:

指路:300. 最长递增子序列 - 力扣(LeetCode)
思路与代码:

求最长递增子序列,那么就定义一个数组dp[i],含义为最长递增子序列。这里有一个小问题,这里的序列的范围为何。如果把遍历范围定为全数组那和暴力无异,显然也不符合O(nlogn)的要求。那么在这里我们定义遍历范围的时候就要把dp[i]定义为以nums[i]结尾的最长递增子序列的长度。随后我们定义一个j在i的范围内遍历,当nums[i]>nums[j]时,在这里就得到了一个dp[i]=dp[j]+1,而我们要求的是最大递增子序列,那么要在原有的dp[i]和得到的dp[i]中取较大值,也就是dp[i]=max(dp[i], dp[j] + 1)。最后我们看需要输出的是什么,在样例中我们可以看到绝对不再是dp[nums.size()-1],我们需要的是整个数组的最长递增子序列,那么就需要遍历整个数组的dp值,取出最大的即可。代码如下:

class Solution {
public:int lengthOfLIS(vector<int>& nums) {// dp数组的含义为最长递增子序列长度if (nums.size() <= 1) return nums.size();vector<int> dp(nums.size(), 1);dp[0] = 1;int result = 0;// 递推for (int i = 1; i < nums.size(); i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = max(dp[j] + 1, dp[i]);}if (dp[i] > result)    result = dp[i];}}return result ;}
};

题2:

指路:674. 最长连续递增序列 - 力扣(LeetCode)
思路与代码:
1.动态规划

区别于上题者为“连续”。连续就很方便了,比较清楚相邻的两个就好了,也就是nums[i]与nums[i-1]是否相等。注意这里的子序列,即使最短也是1,因此,result初始为1。代码如下:

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {if (nums.size() == 0) return 0;vector<int> dp(nums.size(), 1);int result = 1;dp[0] = 1;for (int i = 1; i < nums.size(); i++) {if (nums[i] > nums[i - 1]) { dp[i] = dp[i - 1] + 1;}if (dp[i] > result) result = dp[i];}return result;}
};
2.贪心
class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {if (nums.size() == 0) return 0;int result = 1;int count = 1;for (int i = 1; i < nums.size(); i++) {if (nums[i] > nums[i - 1]) {count++;}else {count = 1;}if (count > result) result = count;}return result;}
};

题3:

指路:718. 最长重复子数组 - 力扣(LeetCode)
思路与代码:

两个数组,那么不妨定义一个二维数组记录两个数组的比较情况,dp[i][j]的含义为以下标i-1为尾和j-1为尾的最长重复子数组的长度为dp[i][j]。将尾划定为i-1和j-1而非i和j的原因是,在初始化数组时如果尾为i,j,那么我们需要对数组进行两行的初始化

 for (int i = 0; i < nums1.size(); i++) if (nums1[i] == nums2[0]) dp[i][0] = 1;for (int j = 0; j < nums2.size(); j++) if (nums1[0] == nums2[j]) dp[0][j] = 1;

 而如果将尾划为i-1和j-1时,初始化直接定义为0即可。我们读题可以知道dp[i][j]的状态得于前面的状态,即dp[i][j]=dp[i-1][j-1] + 1,因为在比较两个数组中元素后,两个数组中的元素都需要后退一个从而达到比较全者的要求。在这里遍历顺序无谓先后,选择最普通的一种,外层数组1,内层数组2。注意,因为前面将界限划定为i-1,所以这里要想遍历完数组1,那么i的取值范围就是小于等于nums1.size(),同理,j的遍历范围也一样。代码如下:

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;}if (dp[i][j] > result) result = dp[i][j];}}return result;}
};

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

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

相关文章

一文入门Makefile

今天我们来玩玩Makefile。 这边是借鉴的陈皓老师的《跟我一起写 Makefile》 pdf下载链接如下。 链接&#xff1a;https://pan.baidu.com/s/1woRq2nEkgzLv1o5uE0FZHg?pwdmhrh 提取码&#xff1a;mhrh 我们之前已经算是入门了gcc&#xff0c;那我们的下一站就是Makefile&…

http和https请求总结

http请求是不安全的请求的端口是80&#xff0c;https请求是安全的请求的端口是443 但是请求安全也不是绝对的。 要想先了解https就的先说几个概念 1、证书 2、加密算法 openssl TLS/SSL 3、协议x509协议 http传输数据都是明文&#xff0c;在数据传输的过程会经过很长的链路…

C#面: 能够将非静态的方法覆写成静态方法吗?

在C#中&#xff0c;不能将非静态方法覆写成静态方法。这是因为静态方法是属于类的&#xff0c;而非静态方法是属于类的实例的。覆写&#xff08;重写&#xff09;是指在派生类中重新实现基类中的虚方法或抽象方法&#xff0c;以改变其行为。而静态方法是无法被派生类所继承的&a…

嵌入式学习(Day 51:ARM指令/汇编与c语言函数相互调用)

1.Supervisor模式与SVC模式 Supervisor模式是ARM处理器的一个特权工作模式&#xff0c;允许执行特权指令和访问特权资源。SVC模式&#xff08;Supervisor Call&#xff09;是与Supervisor模式相关的一个功能或指令&#xff0c;用于从用户模式切换到Supervisor模式&#xff0c;…

1、Redis系列-Redis高性能原理详解

Redis高性能原理详解 Redis是一款高性能的内存数据库&#xff0c;广泛应用于需要快速读写访问的数据密集型应用中。它的高性能得益于多方面的设计和优化。以下是Redis高性能实现的详细解释&#xff1a; 1. 单线程架构 Redis采用单线程架构来处理客户端请求&#xff0c;这与传…

服务器流量收发测试-续篇

文章目录 一、概述二、普通java工程1&#xff0c;pom文件2&#xff0c; 定时任务3&#xff0c;打包4&#xff0c;jar运行 三、打包docker镜像1&#xff0c;镜像打包配置docker环境&#xff1a;2&#xff0c;连接远程镜像仓库 四、部署运行1. 容器运行2. 单容器多次运行jar3. 容…

大模型应用研发基础环境配置(Miniconda、Python、Jupyter Lab、Ollama等)

老牛同学之前使用的MacBook Pro电脑配置有点旧&#xff08;2015 年生产&#xff09;&#xff0c;跑大模型感觉有点吃力&#xff0c;操作起来有点卡顿&#xff0c;因此不得已捡起了尘封了快两年的MateBook Pro电脑&#xff08;老牛同学其实不太喜欢用 Windows 电脑做研发工作&am…

04_记录锁

记录锁&#xff08;Record Lock&#xff09; 文章目录 记录锁&#xff08;Record Lock&#xff09;简介原理加锁流程锁类型使用场景示例与其他锁的对比结论 简介 MySQL 中的记录锁&#xff08;Record Lock&#xff09;是行级锁的一种&#xff0c;用于锁定数据库表中的特定行。…

从零开始做题:老照片中的密码

老照片中的密码 1.题目 1.1 给出图片如下 1.2 给出如下提示 这张老照片中的人使用的是莫尔斯电报机&#xff0c;莫尔斯电报机分为莫尔斯人工电报机和莫尔斯自动电报机&#xff08;简称莫尔斯快机&#xff09;。莫尔斯人工电报机是一种最简单的电报机&#xff0c;由三个部分组…

SelfReg-UNet:解决UNet语义损失,增强特征一致性与减少冗余的优化模型

SelfReg-UNet&#xff1a;解决UNet语义损失&#xff0c;增强特征一致性与减少冗余的优化模型 提出背景拆解类比&#xff1a;整理书架语义一致性正则化内部特征蒸馏为什么 UNet 会有语义损失&#xff1f; 提出背景 论文&#xff1a;https://arxiv.org/pdf/2406.14896 代码&…

c++内存管理_复习

new与placement new new&#xff1a; 先调用operator new(大小)&#xff0c;而operator new()会调用malloc尝试分配内存&#xff0c;失败则调用_callnewh()来释放内存&#xff0c;直至分配成功 可以设置分配失败的处理函数&#xff1a;将写好的处理函数作为参数传入set_new_han…

Vue3 使用 Vue Router 时,params 传参失效

前言&#xff1a; 在写项目的时候&#xff0c;使用了 vue-router 的 params 进行传参&#xff0c;但是在详情页面中一直获取不到参数。原因&#xff1a;Vue Router 在2022-8-22的那次更新后&#xff0c;使用这种方式在新页面上无法获取&#xff01; 正文&#xff1a; 在列表页进…

deeplabcut

import pandas as pd import h5py import pickle import json import os # 读取 CSV 文件 csv_file_path /mnt/data/CollectedData_dlc.csv csv_data pd.read_csv(csv_file_path) # 读取 H5 文件 h5_file_path /mnt/data/CollectedData_dlc.h5 with h5py.File(h5_file_pat…

LeetCode题练习与总结:只出现一次的数字Ⅱ--137

一、题目描述 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1&#xff1a; 输入&#xff1a;n…

K8S日常运维手册

Kubernetes&#xff08;简称 K8S&#xff09;是一种广泛使用的容器编排平台&#xff0c;能够自动化部署、扩展和管理容器化应用。对于运维人员来说&#xff0c;掌握 Kubernetes 的日常运维技能是确保系统稳定运行的关键。本文将介绍一些 Kubernetes 日常运维的基本操作与技巧&a…

虚拟机装入kali linux

VMware 首先需要先安装VMware Workstation Pro可以根据这篇文章来下载VMware 下载kali linux Installer Images VS Virtual Machines Installer Images&#xff08;安装镜像&#xff09;Virtual Machines&#xff08;虚拟机&#xff09; 直接访问硬件&#xff0c;定制内核…

Matlab|【防骗帖】考虑时空相关性的风电功率预测误差建模与分析

目录 1 主要内容 2 部分程序 3 下载链接 1 主要内容 这个程序《考虑时空相关性的风电功率预测误差建模与分析》画的图片非常漂亮&#xff0c;和原文献基本一致&#xff0c;但是实际上内容并未实现出来&#xff0c;主要就是利用现有的风电预测的数据和结果做了相关的图&#…

【数据结构】(C语言):链表

链表&#xff1a; 基本单位是节点。节点至少两部分&#xff1a;数据&#xff0c;下一个数据的地址。头指针head&#xff0c;始终指向链表的第一个节点。若没有节点&#xff0c;则headNULL。链表在内存中是非连续的。不能使用索引&#xff08;下标&#xff09;查找元素。只能从…

解决:Xshell通过SSH协议连接Ubuntu服务器报“服务器发送了一个意外的数据包,received:3,expected:20”

下图所示&#xff1a; 日志也基本看不出来问题在哪&#xff0c;只是说断开了连接大概是验证失败。有幸在某论坛评论区找到了原因&#xff0c;是因为我的xshell版本太低了而服务器的ssh版本太高&#xff0c;高版本的ssh默认屏蔽了一部分不太安全的算法导致建立连接的时候验证失败…

C++ 14新特性个人总结

variable templates 变量模板。这个特性允许模板被用于定义变量&#xff0c;就像之前模板可以用于定义函数或类型一样。变量模板为模板编程带来了新的灵活性&#xff0c;特别是在定义泛化的常量和元编程时非常有用。 变量模板的基本语法 变量模板的声明遵循以下基本语法&am…