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

二分系列题

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);}
}

相关文章:

  • 什么是AIOps
  • TDengine 在智慧油田领域的应用
  • 多序列比对软件 Clustal Omega 介绍
  • 嵌入式培训之C语言学习完(十七)结构体、共用体、枚举、typedef关键字与位运算
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十二)
  • 随笔-近况
  • 43.防雷击浪涌设计
  • VBA高级应用30例应用4:利用屏蔽事件来阻止自动运行事件
  • 气动带刮刀硬密封固定式对夹球阀:专为高粘度、强腐蚀性介质设计的工业解决方案-耀圣
  • 聊一部很癫的电影
  • 嵌入式学习笔记 - 垂直消隐期
  • vue数据可视化开发常用库
  • [特殊字符]渲染 101 云渲染:C4D XP 粒子创作者的高效解算新方案
  • World of Warcraft [CLASSIC][80][Deluyia] [Fragment of Val‘anyr]
  • 系统的从零开始学习电子的相关知识,该如何规划?
  • [C++类和对象]类和对象的引入
  • 应急响应基础模拟靶机-security1
  • 电位器如何接入西门子PLC的模拟量输入
  • 【技巧】如何把win10 wsl的安装目录从c盘迁移到d盘
  • 弹窗表单的使用,基于element-ui二次封装
  • 网络营销的特点包括哪些/广州网站优化外包
  • 手机当服务器建网站/太原网站建设
  • .web 建设网站/博客网站seo
  • 上海市嘉定建设局网站/信息流广告投放渠道
  • 什么网站做任务可以赚钱/google seo优化
  • 怎么做网站的图片跳转/seo优化是怎么回事呢