【代码随想录】刷题笔记Day5
前言
竟然足足一星期没刷题了,上周毕设紧急赶了波工,就没什么动力,希望不会因此生疏了,组会过后刷新了焦虑值,又是新的一周,干巴爹
209. 长度最小的子数组
- 暴力解法:时间复杂度O(n2),两个for循环,超时了没通过
class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int num = 100010; // 累积长度 或 INT32_MAXint len = nums.size();for(int i = 0; i < len ; i++){int sum = 0;for(int j = i; j < len; j++){sum += nums[j];if(sum >= target){if(j - i + 1< num){num = j - i + 1;}break;} }}if(num == 100010) return 0;else return num;} };
- 滑动窗口:时间复杂度O(n),一个for循环,保证一个大于等于目标值的最大窗口去慢慢缩小
- 解决:窗口内是什么?如何移动窗口的起始位置?如何移动窗口的结束位置?
class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int num = INT32_MAX; // 结果int sum = 0; // 滑动窗口数值之和int i = 0; // 滑动窗口起始位置for(int j = 0; j < nums.size(); j++){sum += nums[j];while(sum >= target){ // 保持窗口刚好大于targetnum = num < j - i + 1 ? num : j - i + 1; // 简洁写法sum -= nums[i++];}}// 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列return num == INT32_MAX ? 0 : num;} };
904. 水果成篮
- 官方题解注释版,进一步学习滑动窗口,并且熟悉容器哈希表的操作,这个更熟悉
class Solution { public: int totalFruit(vector& fruits){int n = fruits.size();unordered_map<int, int>count;//建立哈希表countsint i = 0;//窗口起始值int ans = 0;//result返回值而已for (int j = 0; j < n; j++){count[fruits[j]]++;//往哈希表里存放尾部键fruits[j],值++while (count.size() > 2){//防止两个键值以上,俩篮子auto it = count.find(fruits[i]);//auto自动类型,迭代器it指向容器中的元素--it->second;//it->second访问值,进行减减操作,it->first访问键if (it->second == 0){//值=0,及时删掉该类别count.erase(it);//抹掉这一类}++i;//左边界右移}ans = max(ans, j - i + 1);//每次循环结束更新最大长度}return ans;//返回result }
- 最小滑窗模板:在迭代右移左边界的过程中更新结果
while j < len(nums):判断[i, j]是否满足条件while 满足条件:不断更新结果(注意在while内更新!)i += 1 (最大程度的压缩i,使得滑窗尽可能的小)j += 1
- 最大滑窗模板:在迭代右移右边界的过程中更新结果
while j < len(nums):判断[i, j]是否满足条件while 不满足条件:i += 1 (最保守的压缩i,一旦满足条件了就退出压缩i的过程,使得滑窗尽可能的大)不断更新结果(注意在while外更新!)j += 1
后言
琢磨累了,明天再写比较难的字符串,感觉现在写不出的原因有两个,一个是思路不熟悉,一个是C++的操作忘掉了,慢慢来吧,干饭去咯
【代码随想录】刷题笔记Day5相关推荐
- 二叉树公共祖先问题-代码随想录-刷题笔记
236. 二叉树的最近公共祖先 递归三部曲: 1)确定递归函数返回值以及参数 需要递归函数返回值,来告诉我们是否找到节点q或者p,那么返回值为bool类型就可以了.但我们还要返回最近公共节点,可以利用 ...
- 第1天-代码随想录刷题训练| 704二分查找、26移除元素
文章目录 1. 二分查找704 扩展 2.移除元素 2.1数组理论基础 2.2 暴力解法 2.3双指针解法 2.4 扩展题 1. 二分查找704 原题链接 给定一个 n 个元素有序的(升序)整型数组 ...
- 代码随想录刷题记录:回溯算法篇
前言 本专题主讲回溯. 回溯算法个人总结 参考了很多网上的教程,首先是该算法的代码模板总结如下: 代码模板 //回溯算法框架 List<Value> result; void backtr ...
- 代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独
目录 332.重新安排行程 思路 重新安排行程 51. N皇后 思路 N皇后 37. 解数独 思路 解数独 这三道题目都是困难题目,都是根据代码随想录的思路总结书写,慢慢理解,慢慢熟练 ...
- 代码随想录刷题总结:数组与字符串
一.二分法 704. 二分查找 细节注意: m i d = b e g + e n d − b e g 2 mid=beg+\frac{end-beg}{2} mid=beg+2end−beg,如此 ...
- 【代码随想录刷题记录】 232.用栈实现队列 、225. 用队列实现栈
232.用栈实现队列 题目 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x ...
- 代码随想录刷题|LeetCode 1049. 最后一块石头的重量II 494. 目标和 474.一和零
目录 1049. 最后一块石头的重量 II 思路 最后一块石头的重量|| 494. 目标和 思路 0.求什么 1.确定dp数组的含义 2.递推公式 3.初始化dp数组 4.遍历顺序 目标和 474.一 ...
- LeetCode刷题笔记-动态规划-day4
文章目录 LeetCode刷题笔记-动态规划-day4 55. 跳跃游戏 1.题目 2.解题思路 3.代码 45. 跳跃游戏 II 1.题目 2.解题思路 3.代码 LeetCode刷题笔记-动态规划 ...
- 刷题笔记(十四)--二叉树:层序遍历和DFS,BFS
目录 系列文章目录 前言 题录 102. 二叉树的层序遍历 BFS DFS_前序遍历 107. 二叉树的层序遍历 II BFS DFS 199. 二叉树的右视图 BFS DFS 637. 二叉树的层平 ...
最新文章
- Unity粒子系统创建VFX游戏特效学习教程 Visual Effects in Unity Particle Systems [Beginner’s Guide]
- 数据结构与算法系列 目录
- 转 php 观察者模式
- 每天都用手机,你对麦克风了解吗?
- Qt工作笔记-Qt5新版信号与槽
- epoch,batch
- 【名词解释】7.UML类图
- Java 输入输出流 解决中文乱码问题【不一定详细但一定实用篇】【全文4800字】
- BAT、360、网易等大公司开源项目
- 东芝166打印机装驱动出现inf安装服务段落无效
- Context and Attribute Grounded Dense Captioning
- Linux下编译build的命令,Linux内核编译中build目录设置
- BodyContent揭秘及定制复杂的JSP标签
- PAT编程(python) 1004 成绩排名
- 灰狼优化算法(Grey Wolf Optimizer, GWO)
- JavaEE进阶总结
- C 语言字符数组的定义与初始化
- 实现redis连接池以及管道
- python按关键字爬取必应高清图片
- asp.net调用飞信免费发短信