- 博客(7)
- 收藏
- 关注
原创 代码随想录#8
这道题在我一看到的时候,惯用思路就是多搞几个计数器,然后计算有没有到需要反转的位置或者剩下多少需不需要反转。但其实每次在遍历的时候直接移动2*k就行,因为要找的位置也是2*k区间的起点。这道题可以直接用库函数中的reverse解决,但是由于主要目的是进行算法的练习,直接使用库函数不是本题的锻炼目的,所以还是需要自己构思怎么具体实现。我自己写的时候中间的交换部分就是老老实实三步走,但确实可以用swap函数来快速省略这些繁琐的步骤,逻辑上是相通的。在这道题中就可以使用reverse来解决短区间的反转问题了。
2024-10-25 20:53:08
153
原创 代码随想录#7
但是利用哈希表的情况下再将四个数组两两分开看,根据遍历得到的和之间的关系就能够比较快速地推出能够得到零的情况次数总和。这道题乍一看跟第一道很像,好像可以直接用哈希表解,但是实际上这道题需要返回符合条件的三元组而且要求三元组不可以重复,那在这种情况下,如何去重变成了一个很重要的问题,这道题解的时候非常困难。这道题的逻辑有点像那个异位词,其实拆解一下道理就是要判断ransomNote这个字符串里的东西能不能由后面magazine里的字符构成。这题先把代码放上来,具体的去重还需要细细思考。
2024-10-24 20:58:37
278
原创 代码随想录#6
这里面的nums_set相当于存储的是对nums1去重之后的内容,而下面的for循环是很经典的查找是否有元素的结构。对于nums2中的元素,如果在nums_set里有。这题要注意题目提示,其中有提到会陷入无限循环,即在求和的过程中,sum会重复出现,那么就需要判断什么时候这个sum进入无限循环了,所以需要一个set来保存已经出现过的sum。在这道题里主要是要判断两个词的字母组成是否相似,字母相对来说是比较好使用哈希表来帮助解题的,正好建立一个26位的数组,每个位置上统计一个字母的数量。
2024-10-23 21:33:06
218
原创 代码随想录#4
链表是一个相对来说比较复杂的数据结构,需要仔细分析前后关系,在处理其中节点的时候也要注意操作的出发点。在具体设计代码的时候需要仔细盘算一下结构。感觉这部分有时间还要回顾一下。
2024-10-22 18:26:22
250
原创 代码随想录#3
在处理头结点的过程中,要注意不能用if因为可能从头开始很长一串都是需要移除的元素,所以应当用while来连续处理。由于在整个链表的遍历过程中,头结点的操作方式和后面的节点都有不同,因此头结点需要单独处理,而后面的节点因为都是中间过程,可以统一用一个循环来处理。由于要加在头结点的位置,需要先建立一个虚拟结点,这样对于头结点的操作就比较方便。双指针法需要理解前后两个指针的移动,厘清顺序,并且需要存储暂时不用到的值,注意交换中的小细节。虚拟头结点的使用需要好好掌握,有时间可以再推推循环链表的写法。
2024-10-20 16:21:45
211
原创 代码随想录打卡#2
看到题目的第一反应居然还是双重循环套了一下,虽然暴力可解但是时间复杂度高,于是琢磨能否有其他的方式完成此题,了解到可以使用滑动窗口法,仔细看了讲解,真的感慨自己大概是想不出来这么妙的方法的,并感觉到自己双指针的内容还没有完全领略到位,需要更进一步挖掘。滑动窗口的宗旨大概是满足窗口内的元素之和大于等于target,当大于时,窗口就应该移动了,窗口的结束位置为遍历数组的指针。对三元运算符也比较不熟练,感觉熟练运用之后可以节省一定的代码量。
2024-10-17 22:10:11
254
原创 代码随想录打卡#1
二分查找的关键点在于区间的定义,左闭右开or左闭右闭在一定程度上影响查找位置的定义,所以在写的时候需要格外注意。左闭右闭的情况左闭右开的情况除了区间的定位,在看题解的过程中我同样注意到关于中间点取值的方法问题,在实际过程中i+j有可能非常大,所以需要换计算方法,这个点可以注意一下。即mid=left+((right−left)>>1);或者int mid = left + (right-left)/2;
2024-10-16 15:26:01
407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人