704、二分查找
自己一开始:遍历一次数组进行查找。
思路:二分查找,针对有序且不重复的数组。二分查找的方式:左闭右闭、左闭右开。
注意:
1. edge case:target不在数组范围内,直接return -1。
2. 左闭右闭、左闭右开区别点:
(1)while中的比较符:保证合法区间。
(2)right初始值:[1] == [1,2)
(3)right赋值:是否+1
3. 计算middle的方式。
27、移除元素
自己一开始:先排序。双指针遍历数组,左指针碰到==val的元素,与右指针指的值交换。用count记录个数。没有注意:换过来的元素依旧有可能==val,需要继续进行判断。count多此一举,且排序没意义还O(nlogn)。
思路:双指针。快指针用来遍历,查找!=val的元素,再赋值覆盖掉慢指针指向的值。数组删除元素后本质是覆盖+移动。slow即k。
一次优化:双指针。左指针用来遍历,查找!=val的元素,将右指针指向的值覆盖val值。右指针相当于快指针。left即k。