- 博客(144)
- 收藏
- 关注
原创 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
173
原创 创建git仓库的问题
本来想改名,把github的main分支改为master,反而更麻烦。1、创建了github时是main为默认分支。要改成master为默认分支。因为本地是git提交的,git的默认分支是master。在弹出的窗口中,选择你想设为默认的分支(例如。打开你的 GitHub 仓库页面。
2025-04-01 19:15:09
198
原创 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
299
原创 5.3.76. 最小覆盖子串
滑动窗口之最小滑窗最小滑窗字符串麻烦在组织答案,要用substr这些东西76. 最小覆盖子串 - 力扣(LeetCode)评论区里有c++版本的答案1、它是先把所有需要的量,所有的需求,比如t的长度等等求出来。遍历时一个一个减。那反过来呢?累加已有的字符数量看是否达到cnt?cnt==0当条件比较方便写吧。2、3、4、unordered_map做哈希:计数数组做哈希:
2025-03-30 16:35:37
210
原创 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
173
原创 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
120
原创 3.3.283. 移动零
public://快慢指针int j=0;i<n;i++) {//直接去掉所有重复0。去重操作。注意边界一定要下。不然会报错if (i<n) {i<n;
2025-03-28 21:30:36
158
原创 3.2.26. 删除有序数组中的重复项
public://快慢指针int j=1;i<n;i++) {//0不用用到。所以都从0开始遍历。return j;
2025-03-28 21:11:10
190
原创 2.5.367. 有效的完全平方数
public://左闭右闭while (l<=r) {//左闭右闭,相等时区间有效//l很接近右边范围极限的时候,l+r会爆。所以这里防溢出//会爆。else r=m-1;
2025-03-25 23:02:33
185
原创 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
96
原创 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
243
原创 2.2.35.搜索插入位置
public://左右指针。左闭右开while (l<r) {//l==r时区间无效else r=mid;//保持区间无效return r;public://定义左右指针。左闭右闭while (l<=r) {//相等时区间有效//防溢出//保持循环不变量//找不到时有三种情况。
2025-03-24 12:06:58
200
原创 9.18. 四数之和
public:i<n;i++) {//一级剪枝去重//和上一道题的区别是上一道题target确定==0//去重j<n;j++) {//二级剪枝去重//双指针。左闭右闭int l=j+1;int r=n-1;while (l<r) {//左闭右闭,相等没意义else {l++;r--;return res;
2025-03-22 17:15:18
246
原创 9.15. 三数之和
public://先排序i<n;i++) {//选一个数为起点,在这个数后面的范围选。//剪枝。后面的数一定比这个数大。一定回不到0//去重,防止出现重复的二元组。//双指针int l=i+1;int r=n-1;while (l<r) {//左闭右闭。相等没意义。//最大值变小点//最小值变大点else {//再去重//最后执行一次。l++;r--;return res;
2025-03-22 16:50:07
134
原创 6.454.四数相加II
public://key:a+b的数值,value:a+b数值出现的次数mp[a+b]++;int cnt=0;//方案数累加return cnt;
2025-03-22 16:12:48
122
原创 5.1. 两数之和
public://key存数,value存下标i++) {//让两数之和变成找一个数。//一个一个遍历。找到了就进if (iter!=mp.end()) {//如果找到了,就返回二者的下标} //没找到就放到map里去找。return {};
2025-03-21 22:19:35
420
原创 4.202. 快乐数
/只是拿出来。下一步再消掉n/=10;//每一位去右移return sum;//求出每个位置上数字的平方//只有两种可能:1、是快乐数。2、进入了无限循环//还没无限循环的话就加入集合。n=sum;//更新。
2025-03-21 21:54:31
133
原创 3.349. 两个数组的交集
public://用迭代器,换个容器存储//用范围for遍历容器=nums.end()) {//找得到的话//临时容器。
2025-03-19 11:35:39
228
原创 5.右旋字符串
string s;cin>>k>>s;//用库函数reverse就用迭代器反转//整个都反转//左闭右开。结尾为 开头+长度return 0;
2025-03-19 10:07:58
175
原创 4.151.翻转字符串里的单词
public:void reverse(string& s,int st,int end) {//左闭右闭。相减就是长度i<j;i++,j--) {void rmspace(string& s) {//看代码顺序是:先走一个while(第一个单词),再加空格,再走完最后一个单词int j=0;//j指向新数组(慢指针),i指向旧数组(快指针)i<s.size();=' ') {//在每个单词的开头处开始。消除了前置空格if (j!//2复制完单词之后加后置空格。
2025-03-19 09:46:58
181
原创 3.替换数字
cin>>s;int cnt=0;i<s.size();i++) {//旧长度的序号//扩容。//每个数字翻6倍的长度,就是每个数字加5个长度//新长度的序号//新旧长度一起开始移动while (idx1>=0) {//从后向前填充,避免数组的移动//遇到数字的话} else {//遇到字母的话照常复制idx1--;return 0;
2025-03-17 23:00:10
258
原创 2.541. 反转字符串II
class Solution {//自写reverse版public://左闭右闭,用的时候就要减一i<j;i++,j--) {//双指针:奇最后指向同一个,不做处理。偶刚刚好i<s.size();i+=2*k) {//固定规律,改变循环区间即可。//对每个区间都是这个循环if (i+k<=s.size()) {//够k个,无论是否到了2k个,都直接反转前k个//左闭右闭,故加长度减一} else {//不够k个,就反转到底。//左闭右闭,故加长度减一return s;
2025-03-17 22:11:59
123
原创 13.有向图的完全可达性
/取出它的所有邻点for (int i:g[s]) {//对list里的每个邻点if (vst[i]==false) {//如果没见过的话int main()cin>>n>>m;//邻接表cin>>s>>t;i<=n;return 0;
2025-03-16 21:55:17
256
原创 14.岛屿周长
cin>>n>>m;i<n;i++) {j<m;i<n;i++) {j<m;j++) {if (g[i][j]==1) {//如果是陆地的话k<4;k++) {//下右上左四个方向。|| g[nx][ny]==0)//到边界或者水域的话说明是边长了res++;return 0;
2025-03-16 16:31:20
99
原创 10.水流问题
这就是前几道题常用的做法。会想到这样是理所当然。但是问题在于 代码随想录终止条件写在前还是写在后的问题。如果写在外部函数循环体之外,就相当于传入节点后再判断。会多递归。但是由于有vst数组的存在,标记以后不会多走错路,这和二叉树没有vst数组不一样。这是我的理解。写在循环体里面的话,在主函数开始的时候就得添上第一个数组的条件。然后再外部函数的循环体里dfs传入的就直接是合法节点了。具体见代码随想录用全局变量也有好处。才不用在每个里用g.size()。答案版本也开始用全局变量了
2025-03-16 15:30:25
380
原创 9.沉没孤岛
/深搜改标记g[x][y]=2;//进来之后先改了。后面可以用这个标记避免重复搜索i<4;cin>>n>>m;i<n;i++) {j<m;j++) {//把不是孤岛的都改标记i<n;i++) {j<m;j++) {//以下两步互不影响的。可以放到同一个循环里//把孤岛变成海i<=n-1;j++) {//把不是孤岛的改回来。
2025-03-13 00:15:28
234
原创 8.孤岛的总面积
/不是要把整个岛搜出来,而是要陆地变海洋。所以不用vst数组g[x][y]=0;//陆地变海洋。同时把相连的陆地都变成海洋。i<4;i++) {//一味跳过即可。return;cin>>n>>m;i<n;i++) {j<m;j++) {i<n;i++) {//传入起点和终点j<m;j++) {//直接总面积相加。不用搜索了int res=0;i<=n-1;
2025-03-12 19:37:33
288
原创 6.岛屿的最大面积
i<4;i++) {if (!num++;return;cin>>n>>m;i<n;i++) {j<m;i<n;i++) {j<m;//每块岛屿都重新计数if (!vst[i][j] && g[i][j]==1) {//对每块岛屿num++;//把所有相连陆地搜出来//检查一下i<n;i++) {j<m;
2025-03-12 14:26:22
212
原创 5.岛屿数量.广搜版
while (!que.pop();i<4;i++) {if (!cin>>n>>m;i<n;i++) {j<m;j++) {//标记数组防止又搜回到自己。int res=0;i<n;i++) {j<m;j++) {if (!res++;//把所有相连的陆地搜出来return 0;
2025-03-12 13:52:05
208
原创 5.岛屿数量.暴搜版
i<4;i++) {//用四个方向当相连边if (!//把所有相连的陆地都标记上int main()int n,m;cin>>n>>m;i<n;i++) {j<m;j++) {//标记数组防止又搜回到自己。int res=0;i<n;i++) {j<m;j++) {if (!res++;//把所有相连的陆地搜出来return 0;
2025-03-12 13:41:14
195
原创 98. 所有可达路径
void dfs(vector<list<int>>& g,int s,int n) {//邻接表return;//邻接表for (int i:g[s]) {//与s相连的每个节点dfs(g,i,n);return;int main()//邻接表cin>>n>>m;cin>>s>>t;//起点为1,终点为ni++) {return 0;
2025-03-12 02:57:37
168
原创 1.739. 每日温度
class Solution {//精简写法public://栈底到栈顶递减。st.push(0);//把第一个塞进去,防空i<n;i++) {//按顺序遍历的while (!st.pop();st.push(i);return res;public://栈底到栈顶递减。st.push(0);//把第一个塞进去,防空i<n;i++) {//一直没遇到更高的温度,就入栈else {//遇到了更高的温度。对每个位置记下 下一个更高的温度。因为进去了之后可能乱序了。
2025-03-12 00:31:28
256
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人