Binary Search 二分法 笔记

1.Binaery Search on Index - OOXX

找到满足某个添加的第一个位置或者最后一个位置

找满足条件的数组中第一个/最后一个位置

2.Binary Search on Index - Half half

并无法找到一个条件,形成OOXX

可以判断,保留有解的一半,或者去掉无解的一半

3.Binary Search on Result

Given an sorted integer array - nums, and an integer - target

Find the any/first/last position of target in nums

T(n) = T(n/2) + O(1) = O (logn)

通过O(1),把规模为n的问题变为n/2

T(n) = O(1) + T(n/4) + O(1) = O(1) + T(n/8) + O(1) + O(1) = logn + T(1)

T(n) = O(n) + T(n/2) = O(n) + O(n/2) + T(n/4) = O(n) + T(n/8) + O(n/2) + O(n/4)

    = O\(2n\) = O\(n\)

Time Complexity in Coding Interview

• O(1) 极少

• O(logn)几乎都是二分法

• O(√n) 几乎是分解质因数

• O(n) 高频

• O(nlogn) 一般都可能要排序 (数据结构,支持logn操作,循环一遍)

• O(n2) 数组,枚举,动态规划

• O(n3) 数组,枚举,动态规划

• O(2^n) 与组合有关的搜索
subset有关

• O(n!) 与排列有关的搜索

Recursion (递归) or While Loop

用 While Loop 不用 Recursion, 除非考得是Recursion 或者复杂问题

Recursion 用到stack 空间, 不推荐, stack v.s. memory,

二分法常见问题

1.死循环

2.循环结束 start < end?

3 指针变化 start = mid?

循环结束条件

start + 1 < end

mid = start + (end - start)/2

results matching ""

    No results matching ""