![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode-二分查找
KobeSacre
这个作者很懒,什么都没留下…
展开
-
在排序数组中查找数字
leetcode原创 2022-10-20 16:30:15 · 102 阅读 · 0 评论 -
旋转数组的最小数字
解题思路: 运用二分法解决, 旋转数组可以根据mid和right的关系来判断当前下所处在的区间。原创 2022-09-05 15:29:43 · 67 阅读 · 0 评论 -
寻找峰值
寻找峰值题目:描述给定一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的A[0] < A[1] 并且 A[n - 2] > A[n - 1]假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。数组保证至少存在一个峰如果数组存在多个峰,返回其中任意一个就行数组至少包含 3 个数样例样例 1:输入:A = [1, 2, 1, 3, 4, 5, 7, 6]输出:1解释:返回任原创 2021-07-29 16:20:35 · 242 阅读 · 0 评论 -
山脉序列中的最大值
山脉序列中的最大值题目:描述给 n 个整数的山脉数组,即先增后减的序列,找到山顶(最大值)。数组严格递增,严格递减样例例1:输入: nums = [1, 2, 4, 8, 6, 3] 输出: 8例2:输入: nums = [10, 9, 8, 7], 输出: 10解题思路:找出第一个nums[i] > nums[i + 1]的数即可public class Solution { /** * @param nums: a mountain sequen原创 2021-07-28 18:07:27 · 153 阅读 · 0 评论 -
目标最后位置
目标最后位置题目:描述给一个升序数组,找到 target 最后一次出现的位置,如果没出现过返回 -1样例样例 1:输入:nums = [1,2,2,4,5,5], target = 2输出:2样例 2:输入:nums = [1,2,2,4,5,5], target = 6输出:-1public class Solution { /** * @param nums: An integer array sorted in ascending order *原创 2021-07-22 10:47:29 · 60 阅读 · 0 评论 -
二分查找
二分查找描述给定一个排序的整数数组(升序)和一个要查找的整数 target,用O(logn)O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。样例样例 1:输入:数组 = [1,4,4,5,7,7,8,9,9,10]target = 1输出:0解释:第一次出现在第0个位置。样例 2:输入:数组 = [1, 2, 3, 3, 4, 5, 10]target = 3输出:2解释:第一次出现在第2个位置样例原创 2021-07-22 10:18:16 · 83 阅读 · 0 评论 -
经典二分查找问题
经典二分查找问题题目:描述在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回 -1。样例样例 1:输入:nums = [1,2,2,4,5,5], target = 2输出:1 或者 2样例 2:输入:nums = [1,2,2,4,5,5], target = 6输出:-1public class Solution { /** * @param nums: An integer array sorted in ascending order原创 2021-07-22 10:15:53 · 103 阅读 · 0 评论 -
寻找两个正序数组的中位数
寻找两个正序数组的中位数题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输入:nu原创 2021-03-24 11:33:21 · 63 阅读 · 0 评论 -
搜索旋转排序数组 II
搜索旋转排序数组 II题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums = [2,5,6,0,0,1,2], target = 3输出: false解题思路:和搜索原创 2021-03-17 14:30:44 · 153 阅读 · 0 评论 -
寻找旋转排序数组中的最小值 II
寻找旋转排序数组中的最小值 II题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0解题思路: 该题和寻找旋转排序数组中的最小值相似, 不同的是该题允许有重复元素, 所以当两个元素相同时应该怎么处理成为了难点, 具体看大佬的题解吧class原创 2020-10-28 15:06:46 · 133 阅读 · 0 评论 -
寻找比目标字母大的最小字母
寻找比目标字母大的最小字母题目:给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’示例:输入:letters = [“c”, “f”, “j”]target = “a”输出: “c”输入:letters = [“c”, “f”,原创 2020-10-28 14:12:25 · 96 阅读 · 0 评论 -
找到 K 个最接近的元素
找到 K 个最接近的元素题目:给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x 的差值一样,优先选择数值较小的那个数。示例 1:输入: [1,2,3,4,5], k=4, x=3输出: [1,2,3,4]示例 2:输入: [1,2,3,4,5], k=4, x=-1输出: [1,2,3,4]解题思路: 有两种思路, 一种是运用双指针法, 通过比较左右两指针元素与x的差来缩小区间, 直到区间为k原创 2020-10-28 10:43:29 · 124 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]解题思路: 用二分法分原创 2020-10-26 15:08:16 · 281 阅读 · 0 评论 -
寻找旋转排序数组中的最小值
寻找旋转排序数组中的最小值题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0解题思路: 用二分法来解决, 首先明确最小值一定是在右侧旋转后的区间内, 所以只用判断mid元素是否在右侧递增区间, 如果不在那就在右边继续查找,原创 2020-10-26 14:19:43 · 153 阅读 · 0 评论 -
寻找峰值
寻找峰值题目:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入: nums = [1,2,1,3,5,6,4]输出: 1 或 5解释: 你的函数原创 2020-10-26 13:45:08 · 97 阅读 · 0 评论 -
第一个错误的版本
第一个错误的版本题目:你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例:给定原创 2020-10-26 10:49:14 · 116 阅读 · 0 评论 -
搜索旋转排序数组
搜索旋转排序数组题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例2:输入: nums =...原创 2020-10-13 15:13:39 · 350 阅读 · 0 评论 -
x 的平方根
x 的平方根题目:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。解题思路: 二分即可, 需要注意的是l, r, mid需要定义为longclass Solution { public int mySqrt(int x) {原创 2020-10-23 15:48:54 · 405 阅读 · 0 评论