Binary Search and Sorted Array
二分法
给有序整数组nums,找出any/first/last position of target in nums,通常找临界点。
复杂度 log(n)
使用
start + 1 < end
是为了保证 start 和 end 在循环退出时总是相邻。退出循环后,你可以单独检查
nums[start]
和nums[end]
,从而准确找到目标值的位置。
mid=start+(end-start)/2 即使Integer很大也不会溢出
二分查找的模版,找第一次出现的位置。 注意可能出现多次,所以当找到这个数字的时候(==)不能直接结束,而要将end移动到mid处。 直到最后缩小到只有一个或两个数字时,优先判断start,再判断end。同理寻找first/last/any occurence of the target, any找到就立刻返回,first每次==移动右边,last每次==移动左边。
binary search 模板
二分查找range
range先找左bound,每次移动end,找右Bound,(可能因为左边的肯定都比左边界小,所以移动右边,右边界同理)每次移动start,中间要reset start和end
二分查找matrix
从左下或者右上。这样每次都可以排除一行或者一列。普通正向或者反向都不好用
三步翻转法
三步翻转法可以实现rotated和rotate数组还原
先局部后整体,前n-k段和后面K段各自翻转,拼接后整体翻转
中间用到reverse一个数组/链表,模板窍门,首尾呼应。
Last updated