数组
三二一一二三
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
941.有效的山脉数组
i<n-1,j>0;) {//停在最高处//停在最高处else break;=0 && j!//只有半座山也不算山脉。原创 2025-04-16 13:53:20 · 261 阅读 · 0 评论 -
1365. 有多少小于当前数字的数字
public://迭代器初始化i>=0;i--) {//从后往前遍历,相同元素的话保留最左边的。//数组哈希,覆盖全范围,元素:比他小的数量i<n;原创 2025-04-16 13:26:20 · 330 阅读 · 0 评论 -
8.44. 开发商购买土地
cin>>n>>m;i<=n;i++) {j<=m;cin>>x;//从1开始就不用特判了。这相当于是同义句。//二维前缀和i<=n;i++) {//减一个得到后半部分的和。减两个的绝对值就得到前后两部分的差值//保留最小值j<=m;j++) {//纵着遍历//同理return 0;原创 2025-04-04 14:42:06 · 218 阅读 · 0 评论 -
7.58.区间和
cin>>n;i<n;return 0;原创 2025-04-04 14:01:26 · 149 阅读 · 0 评论 -
6.2.54. 螺旋矩阵
public://为空//赋值上下左右边界int u=0;int l=0;//要到头。循环里会额外留一个。//循环左闭右开。每行留一个作为下一步的起点。j<r;//上行i<d;//右列j>l;//下行i>u;//左列//成对相加减。四个边界同时往内缩。留下相等的情况单独讨论。//偶数。则会在相邻后错开。奇数,则会在相邻后相等。只要其中一对相等就会退出循环。//若同时奇数。则只需要补充一次u++;l++;d--;r--;//相等时,不用为下一个留个开头了。所以左闭右闭。原创 2025-03-31 15:36:47 · 341 阅读 · 0 评论 -
5.3.76. 最小覆盖子串
滑动窗口之最小滑窗最小滑窗字符串麻烦在组织答案,要用substr这些东西76. 最小覆盖子串 - 力扣(LeetCode)评论区里有c++版本的答案1、它是先把所有需要的量,所有的需求,比如t的长度等等求出来。遍历时一个一个减。那反过来呢?累加已有的字符数量看是否达到cnt?cnt==0当条件比较方便写吧。2、3、4、unordered_map做哈希:计数数组做哈希:原创 2025-03-30 16:35:37 · 260 阅读 · 0 评论 -
5.2.904. 水果成篮
public://用哈希存果树种类int res=0;//果树长度。i<n;i++) {//顺序遍历每棵果树.两个窗口指针while (cnt.size()>2) {//种类超过2之后,就往外扔水果。不同种类的水果都有可能扔//扔完了就删除一个水果种类j++;//扔一个,指针右移一位//从0开始,故长度为i-j+1return res;原创 2025-03-30 15:11:13 · 237 阅读 · 0 评论 -
代码随想录——数组篇总结、目录
双指针(快慢指针)用于复制数组、移除元素。主要是把n^2复杂度降到n。三指针用于搜索查找。原创 2025-03-29 16:04:26 · 199 阅读 · 0 评论 -
3.4.844. 比较含退格的字符串
public://双指针从后向前遍历//代表两个字符串'#'的数量while (i>=0) {//从后往前遍历//记录退格数else {//如果不是退格//退格发挥作用else break;//没有退格了,要比较了i--;//遍历i的做法else {//如果不是退格else break;//没有退格了。要比较了j--;//下面是主逻辑。上面是处理退格的逻辑//遍历完了至少一个。在这是整个while的出口if (s[i]!//直接判断i--;j--;原创 2025-03-29 15:47:06 · 164 阅读 · 0 评论 -
3.3.283. 移动零
public://快慢指针int j=0;i<n;i++) {//直接去掉所有重复0。去重操作。注意边界一定要下。不然会报错if (i<n) {i<n;原创 2025-03-28 21:30:36 · 201 阅读 · 0 评论 -
3.2.26. 删除有序数组中的重复项
public://快慢指针int j=1;i<n;i++) {//0不用用到。所以都从0开始遍历。return j;原创 2025-03-28 21:11:10 · 231 阅读 · 0 评论 -
2.5.367. 有效的完全平方数
public://左闭右闭while (l<=r) {//左闭右闭,相等时区间有效//l很接近右边范围极限的时候,l+r会爆。所以这里防溢出//会爆。else r=m-1;原创 2025-03-25 23:02:33 · 217 阅读 · 0 评论 -
2.4.69.x 的平方根
public://双指针左闭右闭。int ans=0;while (l<=r) {//左闭右闭,相等时区间有效//防溢出//看范围。[ (2^31-1)/2 ]^2 会爆的ans=m;//小数部分会被舍去。所以放在这边。l=m+1;else r=m-1;return ans;原创 2025-03-25 22:53:48 · 139 阅读 · 0 评论 -
2.3.34. 在排序数组中查找元素的第一个和最后一个位置
public://找右边界//根据题意,左闭右闭比较好。int rb=-2;//预设找不到。正常可能走到-1去的。所以用-2while (l<=r) {//左闭右闭,相等时有意义。//防溢出//永远想象l在最左,r在最右,mid在最中间,再根据大于小于来判断target在左区间还是右区间,就比较快if (nums[mid]>target) {//target在左区间。相等不在这边,这边是右边界。所以找的是右边界r=mid-1;} else {//相等在这边。相等时l会继续右移。原创 2025-03-25 22:38:37 · 274 阅读 · 0 评论 -
2.2.35.搜索插入位置
public://左右指针。左闭右开while (l<r) {//l==r时区间无效else r=mid;//保持区间无效return r;public://定义左右指针。左闭右闭while (l<=r) {//相等时区间有效//防溢出//保持循环不变量//找不到时有三种情况。原创 2025-03-24 12:06:58 · 258 阅读 · 0 评论 -
6.59.螺旋数组
/圈数。最后的中心单独处理//行和列//起始位置int t=1;//偏移量int cnt=1;//赋值量//给了n,这个n是长度,可以直接用i=sx,j=sy;//全都左闭右开for (;j<n-t;i<n-t;j>sx;i>sy;i--) {//起始位置(头)更新sx++;sy++;//偏移量更新(导致尾更新)t++;if (n%2!return res;原创 2025-01-01 15:17:19 · 159 阅读 · 0 评论 -
5.209.长度最小的子数组
(INT_MAX和INT_MIN实际上就是+-2147483647。用时要有头文件climit或limit.h)滑动窗口实际上可以视为双指针的一种。我习惯i在前,j在后。原创 2025-01-01 14:15:27 · 182 阅读 · 0 评论 -
4.977.有序数组的平方
按答案所说,数组平方后实际上仍然有序,只是变成两端往中间递减了。(这里是相向双指针,第二题是快慢指针(同向双指针))vector的初始化用法。sort的底层是快排。原创 2025-01-01 13:37:02 · 256 阅读 · 0 评论 -
3.27.移除元素
(样例会拿这个返回的数组长度去输出。原创 2025-01-01 12:02:55 · 207 阅读 · 0 评论 -
2.704.二分查找
二刷:public://定义左右指针。左闭右闭。while (l<=r) {//左闭右闭相等时是有效区间。l==r,[l,r]有效的。return -1;左闭右开public://左闭右开//左闭右开while (l<r) {//l==r,[l,r)是无效区间else r=mid;//保持无效区间。return -1;一刷:直接王道代码模板这里区间是左闭右闭low=mid+1;high=mid-1;return -1;原创 2025-01-01 12:07:22 · 155 阅读 · 0 评论
分享