![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分搜索
小马哥MAX
刷题记录BLOG
展开
-
【两次过】Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。进阶:你可以设计并实现时间复杂度为O(log n)的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入...原创 2021-10-28 09:20:17 · 115 阅读 · 0 评论 -
【一次过】Lintcode 59. 最接近的三数之和
给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和。样例例1:输入:[2,7,11,15],3输出:20解释:2+7+11=20例2:输入:[-1,2,1,-4],1输出:2解释:-1+2+1=2挑战O(n^2) 时间, O(1) 额外空间。注意事项只需要返回三元组之和,无需返回三元组本身...原创 2019-03-31 10:53:20 · 113 阅读 · 0 评论 -
【简单】Lintcode 14: 二分查找
For a given sorted array (ascending order) and atargetnumber, find the first index of this number inO(log n)time complexity.If the target number does not exist in the array, return-1.Example...原创 2018-01-21 20:27:08 · 290 阅读 · 0 评论 -
【一次过】Lintcode 462. 目标出现总和
给一个升序的数组,以及一个target,找到它在数组中出现的次数。样例样例1:输入:[1,3,3,4,5]和target= 3,输出:2。样例2:输入:[2,2,3,4,6]和target= 4,输出:1。样例3:输入:[1,2,3,4,5]和target= 6,输出:0。挑战时间复杂度在O(logn)内解题思路:明显思路是二分搜索。需...原创 2019-02-10 09:31:29 · 228 阅读 · 0 评论 -
【一次过】Lintcode 459. 排序数组中最接近元素
在一个排好序的数组A中找到i使得A[i]最接近target样例样例1:输入:[1, 2, 3] ,target = 2输出: 1.样例2:输入:[1, 4, 6], target = 3输出: 1.样例3:输入:[1, 4, 6],target = 5,输出: 1 或 2.挑战O(logn)时间复杂度。注意事项数组中可以有...原创 2019-01-29 10:14:26 · 510 阅读 · 0 评论 -
【两次过】Lintcode 458. 目标最后位置
给一个升序数组,找到target最后一次出现的位置,如果没出现过返回-1样例给出 [1, 2, 2, 4, 5, 5].target =2, 返回2.target =5, 返回5.target =6, 返回-1.解题思路:典型的二分法。注意二分变化时,l = mid,而不是l = mid + 1防止本身mid已经指向了最后一次位置而错过。并且注意循环条件l ...原创 2019-01-29 09:44:46 · 446 阅读 · 1 评论 -
【两次过】Lintcode 460. 在排序数组中找最接近的K个数
给一个目标数 target, 一个非负整数k, 一个按照升序排列的数组 A。在A中找与target最接近的k个整数。返回这k个数并按照与target的接近程度从小到大排序,如果接近程度相当,那么小的数排在前面。样例如果 A =[1, 2, 3], target =2and k =3, 那么返回[2, 1, 3].如果 A =[1, 4, 6, 8], target =3...原创 2018-12-09 11:23:53 · 1455 阅读 · 0 评论 -
【两次过】Lintcode 62. 搜索旋转排序数组
假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。你可以假设数组中不存在重复的元素。样例给出[4, 5, 1, 2, 3]和target=1,返回 2给出[4, 5, 1, 2, 3]和target=0,返回 -1挑战O(logN...原创 2018-12-08 11:26:14 · 155 阅读 · 0 评论 -
【两次过】Lintcode 141. x的平方根
实现int sqrt(int x)函数,计算并返回x的平方根。样例sqrt(3) = 1sqrt(4) = 2sqrt(5) = 2sqrt(10) = 3挑战O(log(x))解题思路:由于x平方根一定是小于等于x/2,所以可以看作在0-x/2的有序数组中寻找出一个满足条件的数,这个条件是:mid*mid<=x && (mi...原创 2018-09-16 09:58:45 · 293 阅读 · 0 评论 -
【一次过】Lintcode 585. 山脉序列中的最大值
给n个整数的山脉数组,即先增后减的序列,找到山顶(最大值)样例给出数组为[1, 2, 4, 8, 6, 3],返回8给出数组为[10, 9, 8, 7],返回10解题思路:与Lintcode 75. 寻找峰值类似,典型的二分搜索,因为mid的值总会偏向左方,所以大胆l = mid + 1;总会遍历到这个值的。public class Solution { ...原创 2018-12-07 15:04:31 · 481 阅读 · 0 评论 -
【两次过】Lintcode 75. 寻找峰值
你给出一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的 A[0] < A[1] 并且 A[n - 2] > A[n - 1]假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。样例给出数组[1, 2, 1, 3, 4, 5, 7, 6]返回1, 即数值 2 所在位置, 或者6, 即...原创 2018-12-07 14:47:05 · 294 阅读 · 0 评论 -
【一次过】Lintcode 74. 第一个错误的代码版本
代码库的版本号是从 1 到n的整数。某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错。请找出第一个错误的版本号。你可以通过isBadVersion的接口来判断版本号 version 是否在单元测试中出错,具体接口详情和调用方法请见代码的注释部分。样例给出n=5调用isBadVersion(3),得到false调用isBadVersion...原创 2018-12-06 09:58:58 · 106 阅读 · 0 评论 -
【两次过】【二分搜索】Lintcode 61. 搜索区间
给定一个包含n个整数的排序数组,找出给定目标值target的起始和结束位置。如果目标值不在数组中,则返回[-1, -1]样例给出[5, 7, 7, 8, 8, 10]和目标值target=8,返回[3, 4]挑战时间复杂度 O(logn)解题思路:看到有序就用二分搜索,注意二分搜索左值和右值在边界处理上不同,特别是搜索右边界时,必须是while(l+1 &...原创 2018-12-05 09:36:49 · 216 阅读 · 0 评论 -
【一次过】已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位。
已知 sqrt(2)约等于 1.414,那么就可以在(1.41, 1.42)区间做二分.设l = 1.41, r = 1.42, mid = (r+l)/2循环退出条件:r-l <= 精度public class Main { public static void main(String[] args) { double l = 1.41; ...原创 2019-06-18 19:44:59 · 1294 阅读 · 0 评论 -
【一次过】Lintcode 160. 寻找旋转排序数组中的最小值 II
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。数组中可能存在重复的元素。样例给出[4,4,5,6,7,0,1,2]返回 0注意事项The array may contain duplicates.解题思路:相比于上一道Lintcode 159. 寻找旋转排序数组中的最小...原创 2018-09-09 09:25:53 · 146 阅读 · 0 评论 -
【一次过】Lintcode 159. 寻找旋转排序数组中的最小值
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。样例给出[4,5,6,7,0,1,2] 返回 0注意事项You may assume no duplicate exists in the array.解题思路1:直接使用treeSet,返回...原创 2018-09-03 15:34:35 · 122 阅读 · 0 评论 -
【一次过】Lintcode 662. 猜数游戏
我们正在玩猜数游戏。 游戏如下:我从1到n选择一个数字。 你需要猜我选择了哪个号码。每次你猜错了,我会告诉你这个数字是高还是低。你调用一个预定义的接口guess(int num),它会返回 3 个可能的结果(-1,1或0):样例n = 10, 我选择了 4 (但是你不知道)返回 4。正确!解题思路1: 二分法的应用。注意int gue_num=(l+r...原创 2018-06-30 09:28:13 · 275 阅读 · 0 评论