关于leetcode算法:leetcode35
这道题目能够使用暴力的解法,不过暴力的效率不够高,因而能够采纳二分查找,题目连贯间接给出:https://leetcode.cn/problems/search-insert-position/description/ 通常的整数二分模板是如下这样的: bool check(int x) {/*...*/} // 查看x是否满足某种性质//区间[l, r]被划分成[l, mid]和[mid+1, r]时应用:int bsearch_1(int l, int r) { while(l < r) { int mid = l+r>>1; // 若产生整数溢出 改为 l+(r-l>>1) if(check(mid)) r = mid; //check判断mid是否满足性质 else l = mid+1; }}//区间[l, r]被划分成[l, mid-1]和[mid, r]时应用:int bsearch_2(int l, int r) { while(l < r) { int mid = l+r+1>>1; // 若产生整数溢出 改为 l+(r+1-l>>1) if(check(mid)) l = mid; else r = mid-1; }}能够发现区间边界的划分,不是mid+1就是mid-1,因而这个模板对这道题不太可行,所以独自记录下本题目标二分思路。 二分查找波及的很多的边界条件,逻辑比较简单,就是写不好。置信很多同学对二分查找法中边界条件解决不好。例如到底是while(left < right)还是while(left <= right),到底是right = middle呢,还是要right = middle - 1呢?这里弄不分明次要是因为对区间的定义没有想分明,这就是不变量。要在二分查找的过程中,放弃不变量,这也就是循环不变量 (感兴趣的同学能够查一查)。 ...