二分搜索
MD_
不拼一下 你怎么知道你不会成功!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode 面试题 08.03. 魔术索引【二分法的另类实现】
文章目录问题描述解题报告实现代码参考资料 问题描述 魔术索引。 在数组A[0…n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。 示例1: 输入:nums = [0, 2, 3, 4, 5] 输出:0 说明: 0下标的元素为0 示例2: 输入:nums = [1, 1, 1] 输出:1 提示: nums长度在[1, 1000000]之间 解题报告 二分法实原创 2020-07-31 08:54:40 · 223 阅读 · 0 评论 -
Leetcode 658. 找到 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] 说明: k 的值为正数,且总是小于给定排序数组的长度。 数组不为空,且长度不超过 10原创 2020-07-30 20:12:56 · 331 阅读 · 0 评论 -
二分搜索法
描述 通过不断缩小解可能存在的范围,从而求得问题的最优解的方法。 求满足某个条件C(x)的最小x 对于任意满足C(x)的x,如果所有的x’>=x也满足C(x’)的话,就可以使用二分法来求解最小的x。 适用情况 假定一个解并判断是否可行 例题链接 leetcode 410 Split Array Largest Sum C(x):得到m个数组和为x的子数组 #include &l...原创 2019-04-14 10:10:10 · 249 阅读 · 0 评论 -
LeetCode 410 Split Array Largest Sum
题目链接: https://leetcode.com/problems/split-array-largest-sum/?tab=Description 题目: 代码:#include <iostream> #include<cstdio> #include<vector> #define maxn 1005 using namespace std; vector<int >aa; usi原创 2017-03-12 15:48:33 · 284 阅读 · 0 评论 -
Leetcode 153. 寻找旋转排序数组中的最小值
文章目录问题描述解题报告实现代码 问题描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组[0,1,1,4,5,6,7]可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。 你可以假设数组中不存在重复元素。 输入:[3,4,5,1,2]输入:[3,4,5,1,2]输入:[3,4,5,1,2] 输出:1输出:1输出:1 解题报告 暴力搜索 直接遍历数组,当后一个元素...原创 2020-03-26 21:35:20 · 224 阅读 · 0 评论 -
Leetcode 33. 搜索旋转排序数组
文章目录问题描述解题报告实现代码 问题描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 (例如,数组 [0,1,2,4,5,6,7] 可能变成 [4,5,6,7,0,1,2])。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(logn)O(log n)O(logn) 级别。 输入:num...原创 2020-03-27 21:52:17 · 138 阅读 · 0 评论 -
Leetcode 287. 寻找重复数【快慢指针法&二分法】
文章目录问题描述解题报告快慢指针法二分法【抽屉原理】实现代码快慢指针法实现二分法实现参考资料 问题描述 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 说明: 不能更改原数组(假设数组是只读的) 只能使用额外的 O(1)O(1)O(1) 的空间 时间复杂度小于 O(n2)O...原创 2020-04-30 14:56:18 · 415 阅读 · 0 评论 -
Leetcode 1095. 山脉数组中查找目标值【二分法】
文章目录问题描述解题报告实现代码参考资料 问题描述 (这是一个 交互式问题 ) 给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。 如果不存在这样的下标 index,就请返回 -1。 何为山脉数组?如果数组 A 是一个山脉数组的话,那它满足如下条件: 首先,A.length >= 3 ...原创 2020-04-30 22:12:23 · 247 阅读 · 0 评论 -
Leetcode 410. 分割数组的最大值【二分法】
文章目录问题描述解题报告实现代码参考资料 问题描述 给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。 注意: 数组长度 n 满足以下条件: 1 ≤ n ≤ 1000 1 ≤ m ≤ min(50, n) 示例: 输入: nums = [7,2,5,10,8] m = 2 输出: 18 解释: 一共有四种方法将nums分割为2个子数组。 其中最好的方式是将其分为[7,2,5] 和 [10,8], 因为此时这两个子数组各自的和原创 2020-07-25 21:43:14 · 270 阅读 · 0 评论 -
Leetcode 1482. 制作m束花所需的最少天数【二分法】
文章目录问题描述解题报告实现代码参考资料 问题描述 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让我们一起观察这三天原创 2020-06-19 20:14:58 · 267 阅读 · 0 评论 -
Leetcode 1300. 转变数组后最接近目标值的数组和【二分法+边界移动步长优化】
文章目录问题描述解题报告实现代码参考资料 问题描述 给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。 如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。 请注意,答案不一定是 arr 中的数字。 示例 1: 输入:arr = [4,9,3], target = 10 输出:3 解释:当选择 value 为 3 时,数组原创 2020-06-14 18:29:32 · 291 阅读 · 0 评论 -
旋转排序数组系列
文章目录Leetcode 33. 搜索旋转排序数组Leetcode 81. 搜索旋转排序数组 IILeetcode 153. 寻找旋转排序数组中的最小值Leetcode 154. 寻找旋转排序数组中的最小值 II总结参考文献 Leetcode 33. 搜索旋转排序数组 题目描述 实现 Leetcode 81. 搜索旋转排序数组 II 题目描述 实现 Leetcode 153. 寻找旋转排序数组中的最小值 题目描述 实现 Leetcode 154. 寻找旋转排序数组中的最小值 II 题目描述 实现 总结 在旋原创 2020-06-14 16:51:03 · 339 阅读 · 0 评论 -
Leetcode 154. 寻找旋转排序数组中的最小值 II【二分搜索】
文章目录问题描述解题报告实现代码参考资料 问题描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。 示例 1: 输入: [1,3,5] 输出: 1 解题报告 在 Leetcode 153. 寻找旋转排序数组中的最小值 中,元素不重复,因此可以使用 nums[l]<=nums[r] 判断 [l,r] 是否递增,如果是,nums[l] 就是最小的元原创 2020-06-14 16:37:14 · 300 阅读 · 0 评论 -
Leetcode 81. 搜索旋转排序数组 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 解题报告 见代码。 需要特别注意,当 nums[l]==nums[mid],则 l++,只能排除一个数字。原创 2020-06-14 16:03:40 · 168 阅读 · 0 评论 -
Leetcode 面试题04. 二维数组中的查找【二分搜索】
文章目录问题描述解题报告实现代码参考资料 问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 ta原创 2020-06-13 13:38:55 · 263 阅读 · 0 评论 -
Leetcode 1122. 数组的相对排序【二分搜索&桶排序】
文章目录问题描述解题报告暴力搜索桶排序实现代码暴力搜索实现桶排序实现补充参考资料 问题描述 给你两个数组,arr1 和 arr2, arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。 示例: 输入:arr1 = [...原创 2020-04-22 16:42:17 · 170 阅读 · 0 评论
分享