代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II
1.代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
2.代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II
3.代码随想录算法训练营第四天| 203. 移除链表元素、707.设计链表、206.反转链表4.代码随想录算法训练营第五天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交(同160题)、142.环形链表Ⅱ5.代码随想录算法训练营第六天| 242. 有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和6.代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之和7.代码随想录算法训练营第八天|344.反转字符串、541.反转字符串Ⅱ、54.替换数字(卡码网是真滴不好用)8.代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串中第一个匹配项的下标、459.重复的子字符串9.代码随想录算法训练营第十一天|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项10.代码随想录算法训练营第十二天|150.逆波兰表达式求值、239.滑动窗口最大值、347.前k个高频元素11.代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、515、116、117、104、11112.代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 (优先掌握递归)、111.二叉树的最小深度13.代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数977题没什么好说的,找到中间第一个非负值,以此为起点向左、向右分别遍历即可。
1 class Solution { 2 public: 3 vector<int> sortedSquares(vector<int>& nums) { 4 //找到第一个非负值 然后依次比较填入新数组中 5 //注意vec的语法使用 6 //左右指针 分别计数 能达到O(n)的时间要求 7 vector<int> ans(nums.size()); 8 int i = 0; 9 while (i < nums.size() && nums[i] < 0) { 10 i++; 11 } 12 int left = i - 1; 13 int right = i; 14 int len = 0; 15 while (left >= 0 && right < nums.size()) { 16 if (nums[right] * nums[right] <= nums[left] * nums[left]) { 17 ans[len++] = nums[right] * nums[right]; 18 right++; 19 } 20 else { 21 ans[len++] = nums[left] * nums[left]; 22 left--; 23 } 24 } 25 if (left >= 0) { 26 while(left >= 0) { 27 ans[len++] = nums[left] * nums[left]; 28 left--; 29 } 30 } 31 else { 32 while(right < nums.size()) { 33 ans[len++] = nums[right] * nums[right]; 34 right++; 35 } 36 } 37 return ans; 38 } 39 };
209题就是滑动窗口
1 class Solution { 2 public: 3 int minSubArrayLen(int target, vector<int>& nums) { 4 // 5 int left = 0; 6 int right = 0; 7 int sum = 0; 8 int len = 0;//记录当前子数组长度 9 int min = nums.size() + 1;//记录满足条件的最短子数组长度 10 while ( right < nums.size() ) { 11 if ( sum < target ) { 12 sum += nums[right++]; 13 len++; 14 } 15 else { 16 sum = sum - nums[left++]; 17 len--; 18 } 19 if (sum >= target && len <= min ) { 20 min = len; 21 } 22 } 23 while (left <= right && sum >= target) { 24 sum = sum - nums[left++]; 25 len--; 26 if (sum >= target && len <= min ) { 27 min = len; 28 } 29 } 30 return (min < nums.size() + 1)?min:0; 31 } 32 };
59题的方法比较笨,但感觉也算实用的,就是注意四个方向的转向循环填入数字,但是如果题目稍微变一下,跳着填入数字,估计这个写法就用不了了。
1 class Solution { 2 public: 3 vector<vector<int>> generateMatrix(int n) { 4 if (n == 1) { 5 vector<vector<int>> ans(1, vector<int>(1,1));; 6 return ans; 7 } 8 int t = 1; 9 vector<vector<int>> ans(n, vector<int>(n,-1)); 10 int i = 0, j = 0; 11 // string dir[] = {"right", "left", "down", "up"}; 12 // string flag; 13 // flag = dir[0]; 14 while (t <= n*n) { 15 for (; j < n && ans[i][j] == -1;) { 16 ans[i][j] = t++; 17 if( j < n-1 && ans[i][j+1] == -1 ) { 18 j++; 19 } 20 } 21 i++; 22 for(;i < n && ans[i][j] == -1;) { 23 ans[i][j] = t++; 24 if( i < n-1 && ans[i+1][j] == -1 ) { 25 i++; 26 } 27 } 28 j--; 29 for(;j > -1 && ans[i][j] == -1;) { 30 ans[i][j] = t++; 31 if( j > 0 && ans[i][j-1] == -1 ) { 32 j--; 33 } 34 } 35 i--; 36 for(;i > -1 && ans[i][j] == -1;) { 37 ans[i][j] = t++; 38 if( i > 0 && ans[i-1][j] == -1 ) { 39 i--; 40 } 41 } 42 j++; 43 } 44 return ans; 45 } 46 };
自在飞花轻似梦
合集:
代码训练营
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端