二分法
文章平均质量分 64
记录有关使用二分法的题目和方法。
重剑DS
学的越多,越觉无知
展开
-
浙江农林大学第十九届程序设计竞赛暨天梯赛选拔赛(同步赛)——灾难预警(二分 + dfs解题)
链接:https://ac.nowcoder.com/acm/contest/7872/M来源:牛客网题目描述众所周知,浙农林是一条河。由于浙江农林大学的特殊地形,当你在下雨后漫步在农林大路上的时候难免会出现一脚踩进一个水坑的情况的情况。而农农非常不喜欢踩到水坑的感觉,请你帮忙设计一个程序来帮助农农判断他能否在不踩入水坑的情况下回到寝室。已知,浙江农林大学可以表示为一个 N * N 的矩阵。对于每个位置有一个海拔数...原创 2020-11-16 13:53:22 · 328 阅读 · 0 评论 -
二分查找的三个模板(C++实现)
来源:力扣-二分查找模板一:/*模板 1 用于查找可以通过访问数组中的单个索引来确定的元素或条件。 1.二分查找的最基础和最基本的形式。 2.查找条件可以在不与元素的两侧进行比较的情况下确定(或使用它周围的特定元素)。 3.不需要后处理,因为每一步中,你都在检查是否找到了元素。如果到达末尾,则知道未找到该元素。初始条件:left = 0, right = length-1终止:left > right向左查找:right = mid-1向右查找:left = mid+1原创 2020-09-28 14:05:34 · 572 阅读 · 0 评论 -
410. 分割数组的最大值(C++)---动态规划、二分查找 + 贪心 解题
题目详情给定一个非负整数数组和一个整数 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],因为此时这两个子数组各自的和的最大值为18,在所有情况中原创 2020-07-25 10:33:23 · 644 阅读 · 0 评论 -
378. 有序矩阵中第K小的元素(C++)---基于堆排序的方法 / 二分法(并说明 二分查找最后的结果值一定在矩阵中) 解题
题目详情给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。提示:你可以假设 k 的值永远是有效的,1 ≤ k ≤ n2 。——题目难度:中等基于堆排序的方法关于优先队列的使用 可以看看这篇——215. ...原创 2020-07-02 11:26:12 · 371 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字(C++)---减治法思想,二分查找解题
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0——题目难度:简单分析这道题可以通过不断排除那些不可能是最小值的元素,进而缩小范围,那么最后范围缩小到只有一个元素时即为最小值元素。可以拿中间的数和最右边的数来进行比..原创 2020-07-22 11:22:44 · 305 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组(C++)---双指针法 / 二分法 解题
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, i原创 2020-07-20 13:29:06 · 317 阅读 · 0 评论 -
33. 搜索旋转排序数组(C++)---二分查找
题目详情假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2]...原创 2020-04-27 19:34:22 · 541 阅读 · 0 评论 -
1095. 山脉数组中查找目标值(C++)---二分查找
题目详情——题目难度: 困难思路二分法解题的基础:峰值左边数组是升序的,峰值右边数组是降序的既然有顺序,搜索应该考虑下二分法。步骤1.先找出峰值所在的索引2.先在峰值左边寻找目标值3.如果步骤2找不到,再在峰值右边寻找目标值-前一次代码×(错误原因:You made too many calls to MountainArray.get().)/*...原创 2020-04-29 15:22:35 · 314 阅读 · 0 评论 -
69. x 的平方根(C语言/C++)---牛顿迭代法 和 二分法
题目详情实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。——题目难度:简单-牛顿迭代法解题(C语言)int mySqrt(int x){ if(x<2) return x; ...原创 2020-05-09 08:39:47 · 941 阅读 · 0 评论 -
1300. 转变数组后最接近目标值的数组和(C++)---双重二分查找解题
题目详情给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。示例 1:输入:arr = [4,9,3], target = 10输出:3解释:当选择 value 为 3 时,数组会变成 [3, 3, 3],...原创 2020-06-14 10:54:18 · 381 阅读 · 0 评论 -
解方程(C++)---二分法
题目详情给出n个整数和x,请问这n个整数中是否存在三个数a,b,c使得ax2+bx+c=0,数字可以重复使用。输入描述:第一行两个整数n,x第二行n个整数a[i]表示可以用的数1 <= n <= 1000, -1000 <= a[i], x <= 1000输出描述:YES表示可以NO表示不可以输入2 1 1 -2输出YES要使用二分法解答此题,我觉得应该先找到该在哪使用二分法。其实要解这个...原创 2020-06-23 21:06:56 · 1933 阅读 · 0 评论