二分算法
suxiaorui
孤独与我 随风相伴
展开
-
acwing——69. 数组中数值和下标相等的元素
69. 数组中数值和下标相等的元素 假设一个单调递增的数组里的每个元素都是整数并且是唯一的。 请编程实现一个函数找出数组中任意一个数值等于其下标的元素。 例如,在数组[-3, -1, 1, 3, 5]中,数字3和它的下标相等。 样例 输入:[-3, -1, 1, 3, 5] 输出:3 注意:如果不存在,则返回-1。 解题思路: 直接二分即可。 程序代码: class Solution { publ...原创 2020-04-30 23:44:41 · 242 阅读 · 0 评论 -
Leetcode——面试题53 - II. 0~n-1中缺失的数字
面试题53 - II. 0~n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 示例 2: 输入: [0,1,2,3,4,5,6,7,9] 输出: 8 限制: 1 <= 数组长度 <= 10000 来源:...原创 2020-04-30 00:16:13 · 374 阅读 · 0 评论 -
Leetcode——441. 排列硬币
441. 排列硬币 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。 给定一个数字 n,找出可形成完整阶梯行的总行数。 n 是一个非负整数,并且在32位有符号整型的范围内。 示例 1: n = 5 硬币可排列成以下几行: ¤ ¤ ¤ ¤ ¤ 因为第三行不完整,所以返回2. 示例 2: n = 8 硬币可排列成以下几行: ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ 因为第...原创 2020-04-29 23:49:31 · 417 阅读 · 0 评论 -
Leetcode——367. 有效的完全平方数
367. 有效的完全平方数 给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。 说明:不要使用任何内置的库函数,如 sqrt。 示例 1: 输入:16 输出:True 示例 2: 输入:14 输出:False 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-perfec...原创 2020-04-29 22:55:19 · 243 阅读 · 0 评论 -
Leetcode——704. 二分查找
704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例 2: 输入: nums = [-1,0,3,5,9...原创 2020-04-29 22:23:38 · 1206 阅读 · 0 评论 -
acwing——790. 数的三次方根
790. 数的三次方根 给定一个浮点数n,求它的三次方根。 输入格式 共一行,包含一个浮点数n。 输出格式 共一行,包含一个浮点数,表示问题的解。 注意,结果保留6位小数。 数据范围 −10000≤n≤10000 输入样例: 1000.00 输出样例: 10.000000 解题思路: 这个题浮点数二分,套用模板即可。 二分模板链接 注意这里是保留6位小数,所以这里取 r - l > 1e-8...原创 2020-04-29 22:09:55 · 292 阅读 · 0 评论 -
acwing——789. 数的范围
789. 数的范围 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回“-1 -1”。 输入格式 第一行包含整数n和q,表示数组长度和询问个数。 第二行包含n个整数(均在1~10000范围内),表示完整数组。 接下来q行,每行包含一个整数k,表示一个询问元素。 输出格式 共q行,每行包...原创 2020-04-29 22:05:05 · 301 阅读 · 0 评论 -
Leetcode——153. 寻找旋转排序数组中的最小值
153. 寻找旋转排序数组中的最小值 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [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 来源:力扣(LeetCode) ...原创 2020-04-29 00:02:39 · 193 阅读 · 0 评论 -
Leetcode——34. 在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: n...原创 2020-04-28 23:36:16 · 248 阅读 · 0 评论 -
Leetcode—— 35. 搜索插入位置
35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5,6]...原创 2019-11-06 14:57:21 · 162 阅读 · 0 评论 -
Leetcode——69. x 的平方根
69. x 的平方根 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 来源:力扣(LeetCode) 链接:https://leetc...原创 2020-04-28 22:58:33 · 209 阅读 · 0 评论 -
acwing——二分模板
二分模板 二分模板一共有两个,分别适用于不同情况。 算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。 版本1 当我们将区间 [l, r] 划分成 [l, mid] 和 [mid + 1, r] 时,其更新操作是 r = mid 或者 l = mid + 1,计算 mid 时不需要加 1 。 int bsearch_1(int l, int ...原创 2020-04-28 22:39:08 · 829 阅读 · 0 评论