
二分法
文章平均质量分 94
小胡同的诗
千里之行,始于足下
展开
-
【数学】手写开根号(牛顿迭代法 | 二分)
利用牛顿迭代法和二分法分别求某个有理数的开 n 次根号。原创 2022-09-19 23:13:28 · 1690 阅读 · 0 评论 -
LeetCode287 寻找重复数(双指针 | 弗洛伊德判圈)
题目链接:leetcode287题面解题思路二分二分重复的数的答案,根据抽屉原理,数据中必有重复的数时间复杂度:O(nlogn)O(nlogn)O(nlogn) ,空间复杂度:O(1)O(1)O(1)双指针构造一个快慢指针,第一次相遇后,继续走c步到达环的起点也就是入度大于2的点,即重复的数。证明:设环之前的长度为a,环起点到相遇点长度为b,相遇点到环起点为c由于起初步长相差1,所以直到相遇时,快指针路程一定只比慢指针多k(b+c),也就是环的长度的整数倍并且两者的路程是两倍的关系原创 2020-12-07 09:00:59 · 357 阅读 · 0 评论 -
LeetCode81 搜索旋转排序数组 II(二分)
题目链接:leetcode81题面题面大意33 题的延伸,略解题思路二分和 154 优化 153 的一样,当不能确定是左区间还是右区间时,把区间长度减一。数组存在大量重复元素时,时间复杂度退化到 O(n)O(n)O(n)。代码实现class Solution {public: bool search(vector<int>& nums, int target) { if (nums.size() == 0) return false;原创 2020-09-28 17:53:04 · 226 阅读 · 0 评论 -
LeetCode33 搜索旋转排序数组(二分)
题目链接:leetcode33题面题目大意做法和 153 比较类似,属于二分搜索某个值的问题。解题思路暴力略二分153 那题是夹逼出一个最小值,也就是一定有答案。而本题不同,可能没有这个数,在二分结束的时候需要判定一下是否找到答案。当然,做法类似,都是先确定 mid 所在的位置是在间断点的左边或者是右边,然后再根据各自的区间去划分。注意根据二分的写法对边界情况的判定。代码实现class Solution {public: int search(vector<i原创 2020-09-28 17:48:13 · 151 阅读 · 0 评论 -
LeetCode154 寻找旋转排序数组中的最小值 II(二分)
题目链接:leetcode154题面题目大意具体题意和 153 那道一样,只不过多了一个元素重复的条件。解题思路暴力略二分做法和 153 一样,只不过对于 mid 和 右端点相等时,我们把区间 - 1 即可。当然,在有大量重复元素的情况下,时间复杂度会退化到 O(n)O(n)O(n)。注意:这两题的右边界 r 都被设为 n - 1 ,这是因为我们知道数组中一定有答案,则如果和正常的二分那样设置在 n 的未知,则最后结束循环的时候 l 可能越界到达 n 。此外,如果初始设置在 n原创 2020-09-28 17:33:29 · 147 阅读 · 0 评论