当前位置: 首页 > 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二次封装
  • 龙湖集团:今年前4个月销售220.8亿元,4月新增两块土地储备
  • 2025中国南昌国际龙舟赛5月23日启幕,是历年来南昌举办的最高规格龙舟赛事
  • 视频丨雄姿英发!中国仪仗队步入莫斯科红场
  • 市自规局公告收回新校区建设用地,宿迁学院:需变更建设主体
  • 九家企业与上海静安集中签约,投资额超10亿元
  • 奥园集团将召开债券持有人会议,拟调整“H20奥园2”本息兑付方案