704.二分查找
思路:注意题目中的有序+无重复元素,尤其是有序。1. 确定区间(左闭右闭/左闭右开)2. 根据区间开闭确定初始范围,要包含n个数。3. 根据区间开闭确定while中为</<=。4. 根据区间开闭确定收缩条件(right=mid - 1/right=mid)
35.搜索插入位置
思路:有序+无重复->二分法。1. 确定区间(左闭右闭/左闭右开)2. 根据区间开闭确定初始范围,要包含n个数。3. 根据区间开闭确定while中为</<=。4. 根据区间开闭确定收缩条件(right=mid - 1/right=mid)。5. 根据区间开闭确定当目标值不存在于数组的情况下while循环结束时left和right的位置,并注意数组索引从0开始。
34.在排序数组中查找元素的第一个和最后一个位置
思路:有序-》二分法,由于看到该题为有序,思路为利用二分法找到目标值,并从该目标值左右探索到边界即为所求。1. 确定区间(左闭右闭/左闭右开)2. 根据区间开闭确定初始范围,要包含n个数。3. 根据区间开闭确定while中为</<=。4. 根据区间开闭确定收缩条件(right=mid - 1/right=mid)。5. 找到目标值后通过while左右探索到边界,注意限制探索过程corner case。
备注:答案的双二分法看了一遍思路,但是没有手写
27.移除元素
思路:
暴力法要注意数组更新后索引和数组size的减小,因为该减小第二遍遍历时不能增加索引限制。1. 外循环遍历。2. 找到目标值进入内循环,将该值往后的数前移一位。3. 外循环索引和遍历减1。
双指针法将right从左侧右移遍历,找到与val不同的值即放入left中,left右移。该题return数字i即返回数组前i位