344.反转字符串-力扣(Leetcode)一开始写的时候循环的终止条件出了点问题,没有+1,这里应该通过几个小数的特例判断一下classSolution:defreverseString(self,s:List[str])->None:"""Donotreturnanything,modifysin-placeinstead."""n=len(s)-1foriinrange(n//2+1):s[i],s[n-i]=s[n-i],s[i]returns541.反转字符串II-力扣(Leetcode)这里一开始思路不清楚,后来看了下参考代码,发现Python的列表切片操作会自动处理那些超出列表长
977有序数组平方思路:有序数组的平方最大值一定在两端,考虑设置双指针vectorsortedSquares(vector&nums){intn=nums.size();//定义一个新数组,用来存每次比较较大的数值,并按题目要求以递增方式存储,要从后往前存vectorans(n);//定义双指针,一头一尾,因为是升序排序,所以数组的最大值一定在数组两端intleft=0,right=n-1,i=n-1;while(left207最小子数组思路:滑动窗口,设置双指针(头指针start,尾指针end),窗口大小从1开始,计算窗口内的sum并与target比较,小于target,窗口大小+1(尾指针
24.两两交换链表中的节点题目要点:该题主要考察对结点指针的把握情况,要能够熟练运用结点的交换,临时结点的创建。做题时把图画出来就一目了然。注意:1.注意遍历的停止条件 cur->next != nullptr && cur->next->next != nullptr,该条件是while里的,注意和if里的区分。2.在结点交换时要明白结点的指向只能有一个,一旦更改,原先指向的结点就找不到了,注意先用临时结点保存再更改。19.删除链表的倒数第N个节点题目要点:利用双指针的思想,左右指针好比是一把尺子,让右指针先走n+1步是为了做出尺子的长度,遍历完后左指针正好在要删除的结点左侧(n+1的功劳)
24.两两交换链表中的节点-力扣(LeetCode)一次AC,重点是要画图梳理清楚交换节点的过程#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defswapPairs(self,head:Optional[ListNode])->Optional[ListNode]:dummy_node=ListNode(next=head)cur=dummy_nodewhilecur.next!=Nonean
文章目录977有序数组的平方思路代码总结209长度最小的子数组思路代码总结59螺旋矩阵II思路代码总结977有序数组的平方思路一开始忘记之前的思路了,看来还是要多复习这道题也可以理解为双指针。因为原数组是非递减的,所以最左小,最右大,但同时,最左可能是负数,负数最小时,它的绝对值是最大。新数组存的是平方,因此,最大的平方只可能由数组两端的数字生成。代码classSolution{public:vectorint>sortedSquares(vectorint>&nums){//快慢指针//因为原数组是非递减的,所以最左小,最右大//最左可能是负数,负数最小时,它的绝对值是最大//求的是平方,因
文章目录977有序数组的平方思路代码总结209长度最小的子数组思路代码总结59螺旋矩阵II思路代码总结977有序数组的平方思路一开始忘记之前的思路了,看来还是要多复习这道题也可以理解为双指针。因为原数组是非递减的,所以最左小,最右大,但同时,最左可能是负数,负数最小时,它的绝对值是最大。新数组存的是平方,因此,最大的平方只可能由数组两端的数字生成。代码classSolution{public:vectorint>sortedSquares(vectorint>&nums){//快慢指针//因为原数组是非递减的,所以最左小,最右大//最左可能是负数,负数最小时,它的绝对值是最大//求的是平方,因
链表进阶系列224两两交换链表中的结点我的代码力扣的示例代码代码随想录的代码19删除链表的倒数第N个结点我的代码力扣的示例代码代码随想录的代码160链表相交我的代码力扣的示例代码代码随想录的代码142环形链表II代码随想录的代码力扣的示例代码24两两交换链表中的结点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]我的代码没看任何资料,自己整理逻辑写出来的。classL
977.有序数组的平方思路数组平方后的最大值只可能在数组两端,不可能在中间设置双指针,比较两个指针所指值的大小,记录较大值,接着向中间移动这个指针结束条件:左右指针相背classSolution{public:vectorint>sortedSquares(vectorint>&nums){intk=nums.size()-1;vectorint>result(nums.size(),0);inti=0,j=nums.size()-1;while(ij){//注意这里要iif(nums[i]*nums[i]nums[j]*nums[j]){result[k]=nums[j]*nums[j];k
977.有序数组的平方思路数组平方后的最大值只可能在数组两端,不可能在中间设置双指针,比较两个指针所指值的大小,记录较大值,接着向中间移动这个指针结束条件:左右指针相背classSolution{public:vectorint>sortedSquares(vectorint>&nums){intk=nums.size()-1;vectorint>result(nums.size(),0);inti=0,j=nums.size()-1;while(ij){//注意这里要iif(nums[i]*nums[i]nums[j]*nums[j]){result[k]=nums[j]*nums[j];k
我经常搞混的点:1.first=first.next表示的是移动first指针的位置。如果写first.next=first.next.next,则表示的是更改链表结构,这会跳过first指针的下一个节点,改变链表本身的结构。因此我区分清楚:仅仅需要移动first指针的位置,需要更改链表的结构。2. whilefirst:和whilefirst.next:都是判断条件,两者有不同的含义。whilefirst::判断的是first指针是否存在。只要first指针指向的节点(包括最后的None)存在,循环就会继续。whilefirst.next::判断的是first指针的下一个节点是否存在。只有当