二分查找
惠菁
我见过大海,看过繁星,但唯独遇见你,是我长久以来,所有奔赴的意义。
展开
-
【Java|golang】2389. 和有限的最长子序列---前缀和+二分查找
给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries 。返回一个长度为 m 的数组 answer ,其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。原创 2023-03-17 18:45:00 · 563 阅读 · 0 评论 -
【Java|golang】1760. 袋子里最少数目的球---逆向二分法
给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。原创 2022-12-20 15:58:19 · 502 阅读 · 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 · 83 阅读 · 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 · 89 阅读 · 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 · 73 阅读 · 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 · 196 阅读 · 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 · 69 阅读 · 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 · 213 阅读 · 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 · 75 阅读 · 0 评论 -
【Java】374. 猜数字大小---使用二分查找,时间复杂度O(NlogN)!!!
猜数字游戏的规则如下:每轮游戏,我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1 或 0):-1:我选出的数字比你猜的数字小 pick < num1:我选出的数字比你猜的数字大 pick > num0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == num原创 2021-06-15 21:01:02 · 309 阅读 · 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 · 441 阅读 · 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 · 91 阅读 · 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 · 139 阅读 · 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 · 203 阅读 · 4 评论