中娱网

刷题日记1

2023-08-01 21:15:21 来源:哔哩哔哩

LeetCode27 移除元素:

题目讲到了剩余元素可以任意顺序,且不管后面的元素是什么。我本来想到的是转化为链表或者建立一个新数组,扫描一遍存到新数组里。但是,这不是题目的原意。后面,想到既然可以任意顺序,那么可以双指针,一个指向数据前端left,一个指向数据末尾right,当l值等于val时,将l值与r值交换并将r--,如果l值不等于val时,将l++。放在一个循环里,当l>r时循环结束。


(资料图)

以上是我的思路,提交上去之后,过了。

看了题解,我的思路是差不多对的,但我学到了快慢指针的思想。slow和fast一起向后走,遇到val时,slow停下,fast继续向后,当fast没有遇到val时,交换值,slow向后走。循环以上直到fast到末尾。

LeetCode977 有序数组的平方:

一开始就想到找到数组的最低点,然后分别向左和向右两个指针进行比较,直到两个指针都超出数组范围跳出循环。

这里遇到了一点问题,LeetCode提示下标越界了,找了一圈才突然意识到,我写的判断条件是或,那么如果第一个条件不满足的话,第二个条件一定会运行的呀。修改了一下,过了。

看了题解,我发现了更好的办法,直接从数组的头尾定义双指针,一起向中间靠拢,当l>r时终止循环。

我还学到了merge()函数,C++在其STL库中提供了merge(),它对于将排序两个容器合并为一个容器非常有用。outiter merge (initer1 beg1, initer1 end1, initer2 beg2, initer2 end2, outiter res)

LeetCode209 长度最小的子数组:

这题之前做过一次,从头到尾扫描一遍,一次一次分析满足要求的连续子序列是否为最短,要设一个指针指向子序列的头下标。

LeetCode59 螺旋矩阵 II:

这题一开始看上去就很迷,有想过是不是直接模拟,但......,以为不会这么简单,冥思苦想了几分钟后,看了一眼题解。(原来还真是这样啊!!!)

设置四个指针left,right,top,bottom,之后一直循环就可以了。

DAY1总结:

今天发现之前突击的算法知识遗忘的差不多了,只能一切重新开始咯~

不止为了预推免,是真正想借此机会好好提升一下自己!加油吧~

标签:

热门推荐