数学和算法

ZXAlgorithm - C2 Binary Search

2019-09-30  本文已影响0人  左心Chris

Binary search template: 复杂度,递归与非递归,二分的痛点,模板
OOXX: Find first/last value meeting some condition
找到满足某个条件的第一个位置或者最后一个位置
Half half: Remain the half containing solution
保留有解的一半,或者去掉无解的一半

1 二分法模板

复杂度

Recursion or Non-recursion

痛点

死循环,循环结束条件,指针变化

模板Template

例题

LeetCode 704.Binary search
https://leetcode.com/problems/binary-search/
https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/submissions/1

2 OOXX

一般会给你一个数组,让你找数组中第一个/最后一个满足某个条件的位置

例题

LeetCode 278.First bad version
https://leetcode.com/problems/first-bad-version/description/
D: isBadVersion,通过等于来解决第一个还是最后一个的问题
Lintcode Search in a big sorted array
https://blog.csdn.net/willshine19/article/details/49094139
https://www.jiuzhang.com/solutions/search-in-a-big-sorted-array/
D: Big matrix use *2 to find the upper bound, index = 1; index = index * 2
LeetCode 153.Find minimum in rotated sorted array
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/description/
https://www.jiuzhang.com/solution/find-minimum-in-rotated-sorted-array/
D: Find first position <= or < last number; Consider 2 situations to select end to be target
E: ? Nums[first] <= target

3 Half half

保留有解的一半
Maximum number in mountain sequence
D: nums[mid] > nums[mid + 1], 因为相邻就退出,mid肯定不是start 也不是end
E: Math.max(nums[start], nums[end])
LeetCode 162.Find peak element
https://leetcode.com/problems/find-peak-element/description/
https://www.jiuzhang.com/solution/find-peak-element/
D: nums[mid] nums[mid - 1] nums[mid + 1],之间的关系,有四种情况
E: Math.max(nums[start], nums[end])
LeetCode 33.Search in rotated sorted array
https://leetcode.com/problems/search-in-rotated-sorted-array/description/
https://www.jiuzhang.com/solution/search-in-rotated-sorted-array/
D: nums[start] nums[mid] divide into red line or green line casue start < mid target 在A[start]和A[end]之间
E: ?nums[start] or nums[end] == target
LeetCode 189.Rotate Array
https://leetcode.com/problems/rotate-array/description/
https://www.jiuzhang.com/solution/rotate-array/
** 410. Split Array Largest Sum**
https://leetcode.com/problems/split-array-largest-sum/

上一篇 下一篇

猜你喜欢

热点阅读