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

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.mzph.cn/web/25568.shtml

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

相关文章

Facebook革新:数字社交的下一个阶段

在数字化时代&#xff0c;社交网络已经成为人们生活中不可或缺的一部分。作为全球最大的社交网络平台之一&#xff0c;Facebook一直在不断创新&#xff0c;引领着数字社交的发展。然而&#xff0c;随着科技的不断进步和社交需求的变化&#xff0c;Facebook正在走向一个新的阶段…

Gitte的使用(Windows/Linux)

Gitte的使用&#xff08;Windows/Linux&#xff09; 一、Windows上使用Gitte1.下载程序2.在Gitte上创建远程仓库3.连接远程仓库4.推送文件到远程仓库 二、Linux上使用Gitte1.第一次从仓库上传1.1生成公钥1.2配置SSH公钥1.3新建一个仓库1.4配置用户名和邮箱在Linux中1.5创建仓库…

python字典应用

""" 字典应用 字典中保存了股票信息&#xff0c;完成下面的操作 1.找出股票价格大于100元的股票并创建一个新的字典 2、找出价格最高和最低的股票对应的股票代码 3.按照股票价格从高到低给股票代码排序 """stocks {AAPL: 191.88,G00G: 1186.96,…

强烈推荐 Setapp 上的 Mac 优质软件

Setapp 一款专为 macOS 设计的软件订阅平台&#xff0c;目前提供高达 240 款精心筛选的高品质应用程序&#xff0c;只需每月 9.9 美元的订阅费&#xff0c;即可畅享所有正版软件的使用权。让使用者无忧享受正版软件的稳定性和安全性&#xff0c;彻底告别盗版软件可能引发的风险…

【C++11】常见的c++11新特性(一)

文章目录 1. C11 简介2. 常见的c11特性3.统一的列表初始化3.1initializer_list 4. decltype与auto4.1decltype与auto的区别 5.nullptr6.右值引用和移动语义6.1左值和右值6.1.1左值的特点6.1.2右值的特点6.1.3右值的进一步分类 6.2左值引用和右值引用以及区别6.2.1左值引用6.2.2…

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…

开源VisualFreebasic中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

【设计模式深度剖析】【4】【行为型】【策略模式】

&#x1f448;️上一篇:职责链模式 设计模式-专栏&#x1f448;️ 文章目录 策略模式定义英文原话直译 角色类图策略接口Strategy&#xff1a;具体策略类上下文类Context测试类 策略模式的应用策略模式的优点策略模式的缺点策略模式的使用场景 策略模式 策略模式&#xff08…

Java--递归

1.递归就是A方法调用A方法&#xff0c;也就是调用自己本身 2.利用递归可以用简单的程序来解决一些复杂的问题&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#xff0c;递归策略只需少量的程序就可描述出解题过程所需要的多次重复…

Ubuntu 24.04 LTS 安装配置 MySQL Community Server 8.4.0 LTS

1 安装 Apt Repository ​​​​​​​地址MySQL :: Download MySQL APT Repository sudo dpkg -i mysql-apt-config_0.8.30-1_all.deb #安装mysql 8.4 lts sudo apt update sudo apt-get install mysql-server #修改mysql root密码策略 2 查看版本 testtest:~$ mysqld --v…

力扣每日一题 6/10

881.救生艇[中等] 题目&#xff1a; 给定数组 people 。people[i]表示第 i 个人的体重 &#xff0c;船的数量不限&#xff0c;每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人&#xff0c;但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船…

LinkedList详解(含数据结构动画演示)

目录 LinkedList详解1、LinkedList的继承体系2、LinkedList的构造函数3、LinkedList的add(E e)方法4、LinkedList的Node节点5、双向链表的概念和Node节点的详细解释6、LinkedList的add(E e)方法梳理7、LinkedList的getXXX方法8、LinkedList的removeXXX方法①、removeFirst()方法…

Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a;Tomcat整体架构 Tomcat源码解析(二)&#xff1a;Bootstrap和Catalina Tomcat源码解析(三)&#xff1a;LifeCycle生命周期管理 Tomcat源码解析(四)&#xff1a;StandardServer和StandardService Tomcat源码解析(五)&…

吴恩达神经网络学习笔记1

代码解释 并不是全部代码&#xff0c;思路的流程 import numpy as np# 如何判断咖啡豆是烤好了 # 假设此神经网络由2层构成###### 这部分代码只是如何建立2层网络&#xff0c; ###### 并不包含如何加载神经网络中的参数 w 和 b######################## 第1层网络# x 是…

Ruoyi5.x RuoYi-Vue-Plus新建Translation翻译类

若依框架&#xff08;RuoYi&#xff09;中的Translation翻译类主要作用在于实现字段值的转换或翻译功能&#xff0c;以提高数据展示的准确性和友好性。以下是其具体作用的一些关键点&#xff1a; 字段值转换&#xff1a;若依框架在处理数据时&#xff0c;有时需要将某些字段的…

CrawlSpace爬虫部署框架介绍

CrawlSpace爬虫部署框架介绍 全新的爬虫部署框架&#xff0c;为了适应工作的爬虫部署的使用&#xff0c;需要自己开发一个在线编写爬虫及部署爬虫的框架&#xff0c;框架采用的是Django2.2bootstap依赖scrapyd开发的全新通用爬虫在线编辑部署及scrapy项目的部署框架。项目实现的…

读AI未来进行式笔记08自主57

1. 自主57 1.1. 自主57被视为继火药、核57之后的“第三次zhan筝革命” 1.2. 虽然地雷和导弹揭开了早期简单自主57的序幕&#xff0c;但运用了AI技术的真正的自主57才是正片 1.2.1. AI自主57让整个sha戮过程&#xff1a;搜寻目标、进入zhan斗、抹sha生命&#xff0c;完全无须…

【Labview】通过串口通信从上位机读取和写入数据

最近博主需要通过Labview的上位机控制一个温控仪表&#xff0c;主要实现在上位机读取实时温度和设定的目标温度&#xff0c;以及通过上位机设定目标温度。这里将其中遇到的问题和心得分享给大家&#xff0c;博主自己也做一个记录。 由于温控仪表采用的485通讯&#xff0c;modb…

C语言——字符数组

一、字符数组的定义 语言字符数组的定义是指在C语言中可以使用一组连续的字符来存储和处理字符串。在定义字符数组时&#xff0c;需要指定数组的大小&#xff0c;并且可以初始化数组的内容。 1、字符数组方式&#xff1a; char str[] "Hello,world!";2、指针方式…

目标检测数据集 - 垃圾桶满溢检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;垃圾桶满溢检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如城市道边垃圾桶满溢、小区垃圾桶满溢、社区垃圾桶满溢、农村道边垃圾桶满溢、垃圾集中处理点垃圾桶满溢、公园垃圾桶满溢数据等。数据集标注标签划分为…