二分查找
惠菁
我见过大海,看过繁星,但唯独遇见你,是我长久以来,所有奔赴的意义。
展开
-
【Java|golang】2389. 和有限的最长子序列---前缀和+二分查找
给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries 。 返回一个长度为 m 的数组 answer ,其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。 子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。原创 2023-03-17 18:45:00 · 552 阅读 · 0 评论 -
【Java|golang】1760. 袋子里最少数目的球---逆向二分法
给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。原创 2022-12-20 15:58:19 · 486 阅读 · 0 评论 -
【Java】367. 有效的完全平方数---不使用定义好的函数,使用二分查找
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。 进阶:不要 使用任何内置的库函数,如 sqrt 。 示例 1: 输入:num = 16 输出:true 示例 2: 输入:num = 14 输出:false 提示: 1 <= num <= 2^31 - 1 代码: public boolean isPerfectSquare(int num) { long left=1,right=num;原创 2021-11-04 09:29:07 · 72 阅读 · 0 评论 -
【Java】108. 将有序数组转换为二叉搜索树---搜索二叉树中序遍历反操作,使用递归遍历快速解决问题,比较有特色!!!!
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案: 示例 2: 输入:nums = [1,3] 输出:[3,1] 解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。 提示原创 2021-09-11 17:19:26 · 79 阅读 · 0 评论 -
【Java】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,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1 提示: 你可以假设 nums 中的所原创 2021-09-06 21:53:18 · 63 阅读 · 0 评论 -
【Java】69. x 的平方根---使用二分查找,时间复杂度O(logN)!!!
实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。 代码: public int mySqrt(int x) { if(x==1||x==0) { return x; } int left=0; int right=x; w原创 2021-08-30 14:10:44 · 173 阅读 · 0 评论 -
【Java】剑指 Offer 53 - I. 在排序数组中查找数字 I---妙用二分查找,快速解决问题!!!
统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: 0 限制: 0 <= 数组长度 <= 50000 代码1: public int search(int[] nums, int target) { int left=0; int right=nums.length-1; if(righ原创 2021-07-16 11:24:17 · 54 阅读 · 0 评论 -
【Java】1818. 绝对差值和---使用二分查找,计算总体和,然后剪掉最大某个差值!!!
给你两个正整数数组 nums1 和 nums2 ,数组的长度都是 n 。 数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i < n)的 总和(下标从 0 开始)。 你可以选用 nums1 中的 任意一个 元素来替换 nums1 中的 至多 一个元素,以 最小化 绝对差值和。 在替换数组 nums1 中最多一个元素 之后 ,返回最小绝对差值和。因为答案可能很大,所以需要对 109 + 7 取余 后返回。 |x| 定义为: 如果原创 2021-07-14 10:10:32 · 198 阅读 · 0 评论 -
【Java】275. H 指数 II---时间复杂度O(logN),快速解决问题!!!
给定一位研究者论文被引用次数的数组(被引用次数是非负整数),数组已经按照 升序排列 。编写一个方法,计算出研究者的 h 指数。 h 指数的定义: “h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她)的 (N 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。(其余的 N - h 篇论文每篇被引用次数不多于 h 次。)" 示例: 输入: citations = [0,1,3,5,6] 输出: 3 解释: 给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了原创 2021-07-12 09:36:43 · 60 阅读 · 0 评论 -
【Java】374. 猜数字大小---使用二分查找,时间复杂度O(NlogN)!!!
猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。 你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0): -1:我选出的数字比你猜的数字小 pick < num 1:我选出的数字比你猜的数字大 pick > num 0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num原创 2021-06-15 21:01:02 · 281 阅读 · 4 评论 -
【Java】50. Pow(x, n)---时间复杂度O(logN),快速解决问题!!!
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n)。 示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x = 2.10000, n = 3 输出:9.26100 示例 3: 输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25 提示: -100.0 < x < 100.0 -231 <= n <= 231-1 -104 <= xn &l原创 2021-06-10 09:04:43 · 397 阅读 · 0 评论 -
【java】二分查找-II---优化二分查找,避免重复元素!!!
描述 请实现有重复数字的升序数组的二分查找 给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1 示例1 输入: [1,2,4,4,5],4 复制 返回值: 2 复制 说明: 从左到右,查找到第1个为4的,下标为2,返回2 示例2 输入: [1,2,4,4,5],3 返回值: -1 示例3 输入: [1,1,1,1,1],1 返回值: 0 代码: public int search (int[]原创 2021-05-28 17:19:03 · 77 阅读 · 0 评论 -
【java】剑指 Offer 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] ] 给定 target = 5,返回 true。 给定 ta原创 2021-05-25 11:47:03 · 131 阅读 · 0 评论 -
【java】1482. 制作 m 束花所需的最少天数---使用二分查找,Treeset集合,快速解决问题!!!
现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。 示例 1: 输入:bloomDay = [1,10,3,10,2], m = 3, k = 1 输出:3 解释:让我们一起观察这三天的花开过程,x 表示花开,而 _ 表示花还未开。 现在需要制作 3 束花,每束只需要 1 朵。 1 天后:[x, _,原创 2021-05-09 10:20:34 · 187 阅读 · 4 评论