二分查找
文章平均质量分 59
ggaoda
这个作者很懒,什么都没留下…
展开
-
二分查找---总结
这种平衡版的一个缺点是,如果第一次循环的m处就是要找的key,那么还会继续循环。原因是Java的二进制符号问题,在Java中的数值的二进制的首位表示符号位,要注意的是,在取mid的时候,我们利用的是算数右移操作而不是简单是除以二。我们这个函数的目的是为了返回是否找到,而不是为了获取找不到而插入的下标!指的是,如果找不到要找的元素key,那么将该key插入到数组中的位置.这里我们的左闭右开区间造成了区间左侧和右侧元素的比较次数不平均的问题。的含义,原来是参与比较的右边界,现在变成了不参与比较的右边界。原创 2023-04-03 09:29:40 · 424 阅读 · 0 评论 -
leetcode-704.二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例2:通过提示我们可以看出数组元素都是正数且没有重复元素,属于最基本的二分查找考察或者原创 2023-04-03 09:28:26 · 197 阅读 · 0 评论 -
leetcode-35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 的算法。示例2:示例3:由题目中要求的时间复杂度O(logn)可以知道要用二分查找原创 2023-04-03 09:25:20 · 158 阅读 · 0 评论 -
leetcode-646. 最长数对链
给出 个数对。 在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当 时,数对才可以跟在 后面。我们用这种形式来构造一个数对链。给定一个数对集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。思路:这道题和leetcode-300.最长子序列是一样的,首先明确dp是指什么,表示以这个数对结尾的最长链长度,和300题一样,我们也需要定义一个来同步更新我们需要的最最长链详细思路可以参看300题的解答:leetcod原创 2022-07-13 12:13:43 · 100 阅读 · 0 评论 -
leetcode-4.寻找两个正序数组的中位数
二分查找题目详情给定两个大小分别为 m和 n的正序(从小到大)数组 nums1 和nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为O(log (m+n))。示例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原创 2022-03-31 17:07:18 · 1332 阅读 · 0 评论 -
leetcode-540.有序数组中的单一元素
二分查找题目详情**给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1)空间复杂度。示例1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例2:输入: nums = [3,3,7,7,10,11,11]输出: 10我的first代码:惯性思维想到的是依次比较每一个数和他后面的一个数,一旦不同就是前面这个数是单一的,但是原创 2022-03-30 10:27:36 · 124 阅读 · 0 评论 -
leetcode-154.寻找旋转排序数组中的最小值 II
二分查找题目详情已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 7 次,则可以得到 [0,1,4,4,5,6,7]注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。给你一个可能存在 重复原创 2022-03-29 16:03:52 · 132 阅读 · 0 评论 -
leetcode-81.搜索旋转排序数组 II
二分查找题目详情已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k <nums.length)上进行了 旋转 ,使数组变为[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如,[0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,原创 2022-03-29 15:32:43 · 1476 阅读 · 0 评论 -
leetcode-34.在排序数组中查找元素的第一个和最后一个位置
二分查找题目详情给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-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]示例3:输入:nums = [], target = 0输出:[-1,-1]我的代码:c原创 2022-03-27 19:38:39 · 1721 阅读 · 0 评论 -
leetcode-69.求开方
二分查找题目详情给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5。示例1:输入:x = 4输出:2示例2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。我的first代码:class Solution {public: int m原创 2022-03-27 16:23:30 · 663 阅读 · 0 评论