草庐IT

算法训练营笔记day02|977.有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II

977.有序数组的平方题目连接笔记双指针法:从两边开始遍历,选出平方值较大的数,从数组的后面开始插入。心得一开始想的是用两个指针从中间开始遍历,但是麻烦很多,代码还是简洁的好,应该多尝试反向思考。classSolution{public:vectorint>sortedSquares(vectorint>&nums){intleft=0;intright=nums.size()-1;vectorint>result(nums.size(),0);inti=nums.size()-1;while(leftright){if(nums[left]*nums[left]nums[right]*num

代码随想录算法训练营第七天 | 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和

代码随想录算法训练营第七天|454.四数相加II,383.赎金信,15.三数之和,18.四数之和454.四数相加II:eyes:题目总结:eyes:383.赎金信暴力解法:computer:哈希解法:computer::eyes:题目总结:eyes:15.三数之和哈希解法双指针:eyes:题目总结:eyes:18.四数之和:eyes:题目总结:eyes::balloon:心得收获454.四数相加II题目链接视频讲解给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0nums1[i]+nums2[j]+nums3[k]+

代码随想录算法训练营第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

977.有序数组的平方题目链接:977.有序数组的平方方法一:暴力遍历varsortedSquares=function(nums){for(vari=0;inums.length-1;i++){nums[i]=Math.pow(nums[i],2)}returnnums.sort((a,b)=>{returna-b})}方法二:双指针数组是有序的平方后,数组的最大值是数组的两端varsortedSquares=function(nums){letnewArr=[]letk=nums.length-1//i,j首尾两个指针进行对比for(vari=0,j=nums.length-1;ij;){

算法刷题Day 29 递增子序列+全排列+全排列II

Day29回溯算法491.递增子序列如果直接像下面这样写的话,会出错,出错的案例类似:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9nrEEc2S-1688623883770)(LC491-递增子序列+LC.assets/image-20230703201315163.png)]classSolution{vectorvectorint>>rst;vectorint>path;voidbacktracking(constvectorint>&nums,intidx){if(path.size()>1){rst.push_back(path);}for(inti

240. 搜索二维矩阵 II

题目描述:主要思路:利用矩阵中的单调性进行搜索。classSolution{public:boolsearchMatrix(vectorvectorint>>&matrix,inttarget){intn=matrix.size(),m=matrix[0].size();inti=n-1,j=0;while(i>=0&&jm){if(matrix[i][j]==target)returntrue;if(matrix[i][j]>target)i-=1;elsej+=1;}returnfalse;}};

代码随想录算法训练营day02|977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II

977.有序数组的平方977.有序数组的平方-题目看到这个题目的第一想法是暴力解法,求出数组中每个数的平方后,对数组进行排序classSolution{public:vectorsortedSquares(vector&nums){for(inti=0;i然而题目要求时间复杂度为o(n),暴力解法时间复杂度为o(n+nlogn)。看了题解后发现可以利用双指针解法,因为对含有负数的有序数组,最大值只能在数组的两端,因此用两个指针分别指向数组的起点和末尾,对两个指针指向的值的平方进行计算,判断。classSolution{public:vectorsortedSquares(vector&nums

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

24.两两交换链表中的节点题目链接:24.两两交换链表中的节点文章讲解:24.两两交换链表中的节点视频讲解:帮你把链表细节学清楚!|LeetCode:24.两两交换链表中的节点_哔哩哔哩_bilibili思路:题意要求两两交换链表中的节点 ,首先可以想到:1.两个节点的交换2.整个链表的遍历对于两个节点的交换可以将操作指针cur放在两个交换节点的前一个节点,然后进行交换,随后将cur指针进行移动,可以实现对整个链表的遍历。如图所示,给了一个链表两个节点交换的范例:依然是运用虚拟头结点dummyhead,操作指针cur需要指向两个反转节点的前一个节点。 循环退出条件:cur->next=NULL

代码随想录算法训练营第18天 | 二叉树part05:● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中&后序遍历序列构造二叉树 105.从前&中序遍历序列构造

513找最左node(定义是最下层最左的,不能当做一直callnode_>left就行)一开始写了一个照模板无脑改的递归,会很容易voidorder(TreeNode*node,intdepth,vector>&res){if(node==nullptr)return;if(res.size()==depth)res.push_back(vector());res[depth].push_back(node->val);if(node->left!=nullptr)order(node->left,depth+1,res);if(node->right!=nullptr)order(node-

代码随想录算法训练营第七天 | 字符串基础系列1(反转字符串--反转字符串II--替换空格--反转字符串中的单词)

字符串基础系列1344反转字符串我的代码代码随想录的代码力扣的示例代码541反转字符串II我的代码代码随想录的代码力扣的示例代码剑指offer-05替换空格我的代码代码随想录的代码力扣的示例代码151反转字符串中的单词我的代码代码随想录的代码力扣的示例代码一段用于复制的标题我的代码力扣的示例代码344反转字符串写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。思路简单,想到了使用双指针法。只不过一开始的想法中,还要对字符串为奇数还是偶数分类讨论,但是看了代码随想录的解答后,发

剑指 Offer II 024. 反转链表(经典题型)

时间是伟大的作者,她能写出未来的结局。                ——卓别林目录题目描述:方法1:迭代法(翻指针)方法2:头插法 方法3:递归法 题目描述:给定单链表的头节点head,请反转链表,并返回反转后的链表的头节点。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[]方法1:迭代法(翻指针)迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。和循环其实和像,都有结束的条件。这里就要用到我们之前学习的双指针的