当前位置: 首页 > web >正文

二分系列题

1. 搜索插入位置

在这里插入图片描述


/*** 查找插入的位置:返回第一个大于等于 target 的索引;* 如果 target 大于所有元素,则返回数组长度(即插入到末尾)*/
class Solution {public int searchInsert(int[] nums, int target) {int left = 0;int right = nums.length - 1;// 标准的二分模板while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] < target) {left = mid + 1; // 插入点在右边} else {right = mid - 1; // 插入点在左边或当前}}// 循环结束后,left 就是插入位置(即第一个 >= target 的位置)return left;}public static void main(String[] args) {Solution solution = new Solution();int[] nums1 = {1, 3, 5, 6};System.out.println(solution.searchInsert(nums1, 5)); // 输出 2System.out.println(solution.searchInsert(nums1, 2)); // 输出 1System.out.println(solution.searchInsert(nums1, 7)); // 输出 4System.out.println(solution.searchInsert(nums1, 0)); // 输出 0}
}

2. 第一个大于等于 q 的位置索引


/*** 查找第一个大于等于 target 的位置* 如果不存在、返回 -1*/
class Solution {public int binarySearchFirstGreaterThanOrEqualToQ(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}// 检查 left 是否越界、且是否符合条件if (left < nums.length && nums[left] >= target) {return left; // 找到了符合条件的位置} else {return -1; // 没有任何元素满足 >= target}}public static void main(String[] args) {Solution solution = new Solution();int[] nums1 = {1, 3, 4, 4, 4, 4, 5, 5, 6};System.out.println(solution.binarySearchFirstGreaterThanOrEqualToQ(nums1, 4)); // 输出: 2int[] nums2 = {1, 2, 3};System.out.println(solution.binarySearchFirstGreaterThanOrEqualToQ(nums2, 5)); // 输出: -1int[] nums3 = {1, 2, 3};System.out.println(solution.binarySearchFirstGreaterThanOrEqualToQ(nums3, 2)); // 输出: 1}
}

3. 第一个大于 q 的位置索引

那就 是 第一个大于等于q+1的位置就行了
就是这个思想

class Solution {public int binarySearchFirstGreaterThanOrEqualToQ(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}// 检查 left 是否越界、且是否符合条件if (left < nums.length && nums[left] >= target) {return left; // 找到了符合条件的位置} else {return -1; // 没有任何元素满足 >= target}}public static void main(String[] args) {Solution solution = new Solution();int[] nums = {1, 3, 4, 4, 4,4,5,5,6};int target = 4;int result = solution.binarySearchFirstGreaterThanOrEqualToQ(nums, target+1);System.out.println(result);}
}

4. 最后一个大于等于q的位置索引

那就 第一个大于等于q+1的位置-1 就行了


class Solution {public int binarySearchFirstGreaterThanOrEqualToQ(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}// 检查 left 是否越界、且是否符合条件if (left < nums.length && nums[left] >= target) {return left; // 找到了符合条件的位置} else {return -1; // 没有任何元素满足 >= target}}public static void main(String[] args) {Solution solution = new Solution();int[] nums = {1, 3, 4, 4, 4,4,5,5,6};int target = 4;int result = solution.binarySearchFirstGreaterThanOrEqualToQ(nums, target+1);System.out.println(result);}
}
http://www.xdnf.cn/news/5123.html

相关文章:

  • 【PhysUnits】3.3 SI 基础量纲单位(units/base.rs)
  • 深入理解 JavaScript 对象与属性控制
  • 少儿编程机构用的教务系统
  • AT9880B北斗单模卫星定位SOC芯片
  • 问题五、扩展模板生成器
  • 【NextPilot日志移植】Logger::run()主循环解析
  • 图像配准简单概述
  • 日常知识点之随手问题整理(思考单播,组播,广播哪个更省带宽)
  • MySQL初阶:数据库约束和表的设计
  • Linux基础(关于进程相关命令)
  • WPDRRC 模型:构建动态闭环的信息安全防御体系
  • 深度学习系统学习系列【8】之设计卷积神经网络架构(Pytorch版本)
  • RHCSA Linux系统软件管理和进程管理
  • flowable-适配其他类型数据库,不修改源码解决方案
  • 位运算(二进制中1的个数)
  • uniapp自定义导航栏搭配插槽
  • Linux的进程与线程
  • 笔记,麦克风的灵敏度
  • Jedis高版本的JedisPoolConfig没有maxActive和maxWait
  • Linux使用Docker部署安装应用
  • Papyrus字体介绍
  • 为什么消息队列系统不像数据库系统那样可以配置读写分离?
  • Docker基础入门:容器化技术详解
  • PH热榜 | 2025-05-09
  • class path resource [] cannot be resolved to absolute file path
  • powershell_bypass.cna 插件(适配 Cobalt Strike 4.0 的免费版本下载地址)
  • FreeRTOS菜鸟入门(十四)·事件
  • Prometheus生产实战全流程详解(存储/负载/调度篇)
  • 认识拦截器
  • 如何获取NumPy数组中前N个最大值的索引