代码随想录算法训练营第36期DAY56

news2024/9/21 4:23:06

DAY56

套磁很顺利,发现又有书读了!

300最长递增子序列

  1. 朴素法,这个好想,但是不对,比如

0 1 0 3 2 3

我的算法会找出0 1 3作为答案,而不是0 1 2 3

可以看出,后面的状态依赖于前面的状态:选了前面的3,就不会选出后面的2 3;

没选前面的3,就能够选出后面的2 3.

错误代码:

  1. class Solution {
  2. public:
  3.     int lengthOfLIS(vector<int>& nums) {
  4.         int len=1;
  5.         for(int i=0;i<nums.size();i++){
  6.             int ilen=1;
  7.             int left=nums[i];
  8.             for(int j=i+1;j<nums.size();j++){
  9.                 if(left<nums[j]){
  10.                     ilen++;
  11.                     left=nums[j];
  12.                 }
  13.             }
  14.             len=max(len,ilen);
  15.         }
  16.         return len;
  17.     }
  18. };

  1. 动态规划,第一次接触,积攒经验。

Dp[i]的定义:dp[i]表示i之前包括i的以nums[i]为结尾的最长递增子序列的长度。

“尾部元素”很重要。

状态转移方程:好理解,遍历的思想

认真手写推导了,掌握了。

Code:

记得最后返回的是res就行,而不是dp的末位。

  1. class Solution {
  2. public:
  3.     int lengthOfLIS(vector<int>& nums) {
  4.         vector<intdp(nums.size(),1);
  5.         int res=1;
  6.         for(int i=1;i<nums.size();i++){
  7.             for(int j=0;j<i;j++){
  8.                 if(nums[i]>nums[j]) dp[i]=max(dp[i],dp[j]+1);
  9.             }
  10.             if(dp[i]>res) res=dp[i];
  11.         }
  12.         return res;
  13.     }
  14. };

674最长连续递增序列

复习。滑动窗口法。

精心总结滑动窗口代码模板, 直接搞定80道Leetcode算法题_哔哩哔哩_bilibili

朴素法:

  1. class Solution {
  2. public:
  3.     int findLengthOfLCIS(vector<int>& nums) {
  4.         //朴素
  5.         int res=1;
  6.         for(int i=0;i<nums.size()-1;i++){
  7.             for(int j=i;j<nums.size()-1;j++){
  8.                 if(nums[j]>=nums[j+1]) break;
  9.                 res=max(res,j+2-i);
  10.             }
  11.         }
  12.         return res;
  13.     }
  14. };

双指针:

  1. class Solution {
  2. public:
  3.     int findLengthOfLCIS(vector<int>& nums) {
  4.         //双指针
  5.         int res=1;
  6.         for(int l=0;l<nums.size();l++){
  7.             int r=l+1;
  8.             while(r<nums.size()&&nums[r]>nums[r-1]) r++;
  9.             res=max(res,r-l);
  10.         }
  11.         return res;
  12.     }
  13. };

滑动窗口复习:

精心总结滑动窗口代码模板, 直接搞定80道Leetcode算法题_哔哩哔哩_bilibili

练习:

209长度最小的子数组,中等

注意模版中,对与最长问题,要在外部while去更新bestres;

而在最短问题,需要在内部while去更新bestres;

  1. class Solution {
  2. public:
  3.     int minSubArrayLen(int target, vector<int>& nums) {
  4.         int l=0,r=0,bestres=0;
  5.         int cursum=0;
  6.         while(r<nums.size()){
  7.             cursum+=nums[r];
  8.             while(r<nums.size()&&cursum>=target){
  9.                 //这一句if也很重要
  10.                 if(r-l+1<bestres||bestres==0) bestres=r-l+1;
  11.                 cursum-=nums[l];
  12.                 l++;
  13.             }
  14.             r++;
  15.         }
  16.         return bestres;
  17.     }
  18. };

ACWING799最长连续不重复子序列

799最长连续不重复子序列_哔哩哔哩_bilibili

讲得很好,主要是要手写模拟一遍。

CODE:

  1. #include<iostream>
  2. using namespace std;
  3. const int N=100010;
  4. int n;
  5. int a[N],b[N];
  6. int main(){
  7.     cin>>n;
  8.     int res=0;
  9.     for(int i=0;i<n;i++) cin>>a[i];
  10.     // i denotes begin, j denotes end
  11.     for(int i=0,j=0;j<n;j++){
  12.         b[a[j]]++;
  13.         while(j>i&&b[a[j]]>1) b[a[i++]]--;
  14.         res=max(res,j-i+1);
  15.     }
  16.     cout<<res<<endl;
  17.     return 0;
  18. }

674最长连续递增序列

  1. 朴素 简单啦
  1. class Solution {
  2. public:
  3.     int findLengthOfLCIS(vector<int>& nums) {
  4.         int res=1;
  5.         for(int i=0;i<nums.size();i++){
  6.             int ilen=1;
  7.             for(int j=i+1;j<nums.size();j++){
  8.                 if(nums[j-1]<nums[j]) ilen++;
  9.                 else break;
  10.             }
  11.             res=max(res,ilen);
  12.         }
  13.         return res;
  14.     }
  15. };

  1. 双指针
  1. class Solution {
  2. public:
  3.     int findLengthOfLCIS(vector<int>& nums) {
  4.         int res=1;
  5.         for(int l=0;l<nums.size()-1;l++){
  6.             int llen=1;
  7.             int r=l+1;
  8.             while(r<nums.size()&&nums[r-1]<nums[r]) llen++,r++;
  9.             res=max(res,llen);
  10.         }
  11.         return res;
  12.     }
  13. };

  1. 动态规划

自己想出来了,很好。

  1. class Solution {
  2. public:
  3.     int findLengthOfLCIS(vector<int>& nums) {
  4.         int res=1;
  5.         vector<intdp(nums.size(),1);
  6.         for(int i=1;i<nums.size();i++){
  7.             if(nums[i-1]<nums[i]) dp[i]=dp[i-1]+1;
  8.             res=max(res,dp[i]);
  9.         }
  10.         return res;
  11.     }
  12. };

718最长重复子数组

  1. 很容易想到双指针,但是难点在于,怎么处理定位函数中,有多个定位函数结果,比如:

[0,1,3,2,5,8,9,7]

[0,5,4,2,6,2,3,4]

还是用动态规划吧。

  1. 动态规划,没接触过。

子数组就是连续子序列,没问题。

要想到:用二维数组记录两个字符串的所有比较情况。

学完了,在纸上手动推导一下DP数组:已完成。

一定要记得size()+1 初始化vector时候。

For()循环里也是<=size了,不然比较不完。

  1. class Solution {
  2. public:
  3.     int findLength(vector<int>& nums1, vector<int>& nums2) {
  4.         int res = 0;
  5.         // 一定要记得size()+1
  6.         vector<vector<int>> dp(nums1.size() + 1,
  7.                                vector<int>(nums2.size() + 10));
  8.         for (int i = 1; i <= nums1.size(); i++) {
  9.             for (int j = 1; j <= nums2.size(); j++) {
  10.                 if (nums1[i - 1] == nums2[j - 1])
  11.                     dp[i][j] = dp[i - 1][j - 1] + 1;
  12.                 res = max(res, dp[i][j]);
  13.             }
  14.         }
  15.         return res;
  16.     }
  17. };

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

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

相关文章

ELK组件

资源列表 操作系统 IP 主机名 Centos7 192.168.10.51 node1 Centos7 192.168.10.52 node2 部署ELK日志分析系统 时间同步 chronyc sources -v 添加hosts解析 cat >> /etc/hosts << EOF 192.168.10.51 node1 192.168.10.52 node2 EOF 部署Elasticsea…

Oracle10.2.0.1冷备迁移之_数据文件拷贝方式

由于阿里云机房要下架旧服务器&#xff0c;单位未购买整机迁移服务&#xff0c;且业务较老不兼容Oracle11g&#xff0c;所以新购买一台新服务器进行安装Oracle10.2.0.1 &#xff0c;后续再将数据迁移到新服务器上。 id 数据库版本 操作系统版本 实例名 源库 115.28.242.25…

[数据集][目标检测]厨房积水检测数据集VOC+YOLO格式88张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;88 标注数量(xml文件个数)&#xff1a;88 标注数量(txt文件个数)&#xff1a;88 标注类别数…

tcp协议的延迟应答(介绍+原则),拥塞控制(拥塞窗口,网络出现拥塞时,滑动窗口的大小如何确定,慢启动,阈值)

目录 延迟应答 引入 介绍 原则 拥塞控制 引入 网络出现拥塞 引入 介绍 介绍 拥塞窗口 介绍 决定滑动窗口的大小 慢启动 介绍 为什么要有慢启动 阈值 算法 总结 延迟应答 引入 发送方一次发送更多的数据,发送效率就越高 因为要写入网卡硬件的io速度很慢,尽量…

Chroium 源码目录结构分析(1):源码目录体积一栏

获取源码 首先&#xff0c;我们拉一份最新的源代码&#xff08;笔者是2024.6.6日拉取的&#xff09;&#xff1a; fetch --nohistory chromium 源码预处理 如果运行build&#xff0c;会生成许多生成的代码&#xff0c;因此我们不运行build。 然后&#xff0c;把干扰后续分析…

Python Requests库详解

大家好&#xff0c;在现代网络开发中&#xff0c;与Web服务器进行通信是一项至关重要的任务。Python作为一种多才多艺的编程语言&#xff0c;提供了各种工具和库来简化这一过程。其中&#xff0c;Requests库作为Python中最受欢迎的HTTP库之一&#xff0c;为开发人员提供了简单而…

python实践笔记(一): 模块和包

1. 写在前面 最近在重构之前的后端代码&#xff0c;借着这个机会又重新补充了关于python的一些知识&#xff0c; 学习到了一些高效编写代码的方法和心得&#xff0c;比如构建大项目来讲&#xff0c;要明确捕捉异常机制的重要性&#xff0c; 学会使用try...except..finally&…

AI服务器相关知识

在当今社会&#xff0c;人工智能的应用场景愈发广泛&#xff0c;如小爱同学、天猫精灵等 AI 服务已深入人们的生活。随着人工智能时代的来临&#xff0c;AI 服务器也开始在社会各行业发挥重要作用。那么&#xff0c;AI 服务器与传统服务器相比&#xff0c;究竟有何独特之处&…

C-MAPSS数据集探索性分析

实验数据为商用模块化航空推进系统仿真C-MAPSS数据集&#xff0c;该数据集为NASA格林中心为2008年第一届预测与健康管理国际会议(PHM08)竞赛提供的引擎性能退化模拟数据集&#xff0c;数据集整体信息如下所示&#xff1a; 涡扇发动机仿真模拟模型如下图所示。 仿真建模主要针对…

【AI大模型】Transformers大模型库(五):AutoModel、Model Head及查看模型结构

目录​​​​​​​ 一、引言 二、自动模型类&#xff08;AutoModel&#xff09; 2.1 概述 2.2 Model Head&#xff08;模型头&#xff09; 2.3 代码示例 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#xff0c;为huggingface上数以万计的预…

写给大数据开发,如何去掌握数据分析

这篇文章源于自己一个大数据开发&#xff0c;天天要做分析的事情&#xff0c;发现数据分析实在高大上很多&#xff0c;写代码和做汇报可真比不了。。。。 文章目录 1. 引言2. 数据分析的重要性2.1 技能对比2.2 业务理解的差距 3. 提升数据分析能力的方向4. 数据分析的系统过程4…

计算机提示msvcp120.dll如何修复,7个不同方法分享

msvcp120.dll 是 Microsoft Visual C Redistributable 的一个关键组件&#xff0c;它包含了 C 运行时库&#xff0c;这些库对基于 Visual C 编写的应用程序至关重要。当应用程序运行时&#xff0c;msvcp120.dll 会被加载到内存中以提供必要的函数和类支持。 一、msvcp120.dll功…

springboot与flowable(2):流程部署

一、创建项目 创建springboot项目添加相关依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.…

Android安全开发之 Provider 组件安全

Android系统中的Content Provider组件是一种用于在不同应用之间共享数据的机制。它提供了一种安全、可控的方式&#xff0c;允许应用访问其他应用的数据。然而&#xff0c;如果Provider组件的安全措施没有得到妥善实现&#xff0c;则可能会导致严重的安全漏洞&#xff0c;例如数…

深入理解C语言:main函数的奥秘

在C语言中&#xff0c;main函数是每个程序的入口点&#xff0c;起着至关重要的作用。本文将深入探讨main函数的工作原理&#xff0c;包括其参数、返回值、以及如何从main启动程序的执行。通过实际代码示例&#xff0c;读者将更深入地理解main函数在C语言编程中的核心地位。 第一…

SQL自动发送邮件的方法有哪些?如何配置?

SQL自动发送邮件设置时的注意事项&#xff1f;邮件群发如何操作&#xff1f; 在现代企业中&#xff0c;自动化流程越来越普遍&#xff0c;SQL自动发送邮件作为其中一项重要功能&#xff0c;能够大大提高工作效率并简化数据管理流程。AokSend将介绍几种实现SQL自动发送邮件的方…

MySQL限制登陆失败次数配置

目录 一、限制登陆策略 1、Windows 2、Linux 一、限制登陆策略 1、Windows 1&#xff09;安装插件 登录MySQL数据库 mysql -u root -p 执行命令安装插件 #限制登陆失败次数插件 install plugin CONNECTION_CONTROL soname connection_control.dll;install plugin CO…

探索软件工程师在新能源汽车研发中的角色与贡献

随着全球对可持续发展的关注不断增加&#xff0c;新能源汽车的研发与应用成为了汽车行业的一个重要方向。作为软件工程师&#xff0c;参与新能源汽车研发不仅能够推动科技创新&#xff0c;还能为环保事业贡献力量。本文将深入探讨软件工程师在新能源汽车研发中的具体贡献、所需…

VISIO安装教程+安装包

文章目录 01、什么是VISIO&#xff1f;02、安装教程03、常见安装问题解析 01、什么是VISIO&#xff1f; Visio是由微软开发的流程图和图表绘制软件&#xff0c;它是Microsoft Office套件的一部分。Visio提供了各种模板和工具&#xff0c;使用户能够轻松创建和编辑各种类型的图…

佳能5DMARK IV mov视频覆盖的恢复方法

5DMARK IV算是佳能比较经典的一款摄像机&#xff0c;是佳能早期使用MOV的摄像机之一&#xff0c;MOV是当初佳能高端机的象征&#xff0c;当然现在佳能已经不在通过MOV和MP4来区分硬件级别了。下边这个案例是文件拍摄时断电&#xff0c;结果变成0字节&#xff0c;然后覆盖了部分…