今天没有题,把之前做过的题小结一下。
- 704.二分查找
注意二分查找的前提条件:有序,此外特别注意二分写法中的区间定义和循环条件的写法,即注意边界条件的处理,当区间中没有数据时停止循环 - 27.移除元素
用双指针法求解,一个指针指向存储空间,一个指针遍历数组 - 977.有序数组的平方
依然是用双指针法,两个指针从两边向中间遍历(这样比从中间向两边要稍微简单一些),然后从数组的最后往前存储结果 - 209.长度最小的子数组
这个题用滑动窗口求解,注意滑动窗口与双指针的区别,在写的时候注意什么时候移动左端点,什么时候移动右端点 - 59.螺旋矩阵II
这个题没有特别的方法,考的是循环,一圈为一个大循环,一行或一列为一个小循环,注意每次循环后变量的改变 - 203.移除链表元素
这个题考察的是链表的遍历和删除,对链表的操作中几乎都会涉及到遍历。在删除或插入节点时加入虚拟头节点会方便很多(不用单独考虑头节点) - 707.设计链表
在设计链表的时候需要引入一个虚拟头节点(同样是方便操作),但是这个节点不对外表现出来。此外,再在内部加入一个变量size来存储链表的大小,在编程时会方便很多。 - 反转链表
这个题用到三个指针,一个指针用于指向反转后的下一个节点,一个指针遍历链表,一个指针临时存储未反转前的下一个节点 - 24.两两交换链表中的节点
这个题没有什么特别的方法,主要是先画图确定变化过程,然后再将这个过程用代码描述出来 - 19.删除链表的倒数第N个节点
主要如何将倒数转化为正数,一种可以遍历一次链表得到链表长度,再计算得到正数,另一种是用双指针法,fast指针先移动n步,然后两个指针再一起移动,这样也可以定位倒数第n个节点 - 面试题 02.07. 链表相交
可以将两个节点的地址分别存储到栈中,然后弹栈比较(即从链表的后面往前遍历)。也可以将链表“右对齐”之后两个指针再一起向右移动比较 - 142.环形链表II
用两个快慢指针以不同速度移动,如果有环则两个指针一定会在环内相遇。判断环的入口节点需要稍微推导一下,最后的结论是两个指针分别在头节点和两个指针第一次相遇位置处开始移动,每次移动一个节点,当两个指针重合时那个节点就是环的入口