代码随想录算法训练营第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,一经查实,立即删除!

相关文章

zero shot,few shot以及无监督学习之间的关系是什么

Zero-shot learning、few-shot learning和无监督学习都是机器学习中的方法&#xff0c;它们共同的特点是在有限或没有标签数据的情况下进行学习。下面是这三种方法之间的关系和区别&#xff1a; Zero-shot Learning (零样本学习)&#xff1a; 零样本学习是在模型训练过程中完全…

中介子方程十

X$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpX$XyXtXkXrXiXαX$XiXαXyXEX$XFX$XEXyXαXiX$XαXiXrXkXtXyX$XpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXηXtXαX$XWXyX$XyXWX$XpXαXqXηX$XeXαXhX$XdX$XpX$XdX$XyXeXαX$XEXyXαXiX$XαXiXrXkXtXyX$XpX$XyXtXkXrXiXαX$XiXαXyXEX$XαXeXyX$Xd…

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;彻底告别盗版软件可能引发的风险…

Linux学习问题

遇到的第一个问题&#xff0c;FinalShell连接Centos7后&#xff0c;就连不上网&#xff0c;Centos7联网后就连不上FinalShell 解决方法&#xff0c;虚拟网卡上的ip地址不能和虚拟机ip地址一样 从这得到的解决方法

【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编程语言】编绎…

Java数据结构与算法(leetcode热题881. 救生艇)

前言 救生艇属于贪心算法&#xff0c;解题之前条件一定要归纳好。题目中存在3个要求&#xff1a; 1.一艘船最多坐2人 2.船数要求最小 3.每艘船重量小于limit 意味着体重较轻的两人可以同乘一艘救生艇。 . - 力扣&#xff08;LeetCode&#xff09; 实现原理 1.重量大的有…

机器学习-14-重温经典的用户流失数据挖掘竞赛(实战)

PYTHON用户流失数据挖掘 用户流失预测案例分析 旅游平台用户流失预测 客户流失及用户画像分析 参考和鲸社区的赛题及数据集下载链接地址 1 收集数据 一、项目介绍 携程作为中国领先的综合性旅行服务公司,每天向超过2.5亿会员提供全方位的旅行服务,在这海量的网站访问量中,…

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

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

33、matlab矩阵分解汇总:LU矩阵分解、Cholesky分解和QR分解

1、LU矩阵分解 语法 语法1&#xff1a;[L,U] lu(A) 将满矩阵或稀疏矩阵 A 分解为一个上三角矩阵 U 和一个经过置换的下三角矩阵 L&#xff0c;使得 A L*U。 语法2&#xff1a;[L,U,P] lu(A) 还返回一个置换矩阵 P&#xff0c;并满足 A P*L*U。 语法3&#xff1a;[L,U,P] …

Java--递归

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

Position定位

Position定位 CSS中position属性是比较常用的元素定位方案&#xff0c;position常用的取值有static、relative、absolute、fixed、sticky、inherit。 static static属性是HTML元素的默认值&#xff0c;即没有定位&#xff0c;遵循正常的文档流对象&#xff0c;对于top、bott…

【Python入门与进阶】常见问题与解决方法

1.Anaconda包管理 使用pip卸载包时&#xff0c;报错“无法访问’&#xff0c;在conda环境下进行pip install时&#xff0c;出现拒绝访问的错误 [WinError 5] 2.Jupyter问题 笔记本运行时无反应/文件无法重命名&#xff1a;【Python】Jupyter Notebook无法运行代码&#xff0c…

FENCE.I指令

FENCE.I指令 一、FENCE.I指令简介二、FENCE.I指令举例三、FENCE.I指令格式一、FENCE.I指令简介 FENCE.I 是 RISC-V 指令集架构中的一种 Fence 指令,用于同步指令缓存(Instruction Cache),用于保证内存操作的正确性和顺序性。具体来说,FENCE.I指令可以确保之前发出的所有对…

Java数据结构与算法(买卖股票的最佳时机二贪心算法)

前言 买卖股票最佳时机二&#xff0c;此时不限次数的买卖的要求获得的利益最大化。暴力算法依旧可行&#xff0c;可以参考之前的练习。 . - 力扣&#xff08;LeetCode&#xff09; 贪心算法原理参考:Java数据结构与算法(盛水的容器贪心算法)-CSDN博客 实现原理 1.定义最大…

基于Transformer的模型常见的张量类型

在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;特别是使用基于Transformer的模型&#xff08;如BERT、RoBERTa等&#xff09;进行微调时&#xff0c;输入数据通常会被编码成几个关键的张量。以下是三个最常见的张量类型&#xff1a;input_ids、attention_mask和…