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

日志|寻找旋转排序数组中的最小值|寻找两个正序数组的中位数|二分查找

局部截取_20251003_172941

while (left < right)​ 用于寻找一个位置(如最小值点、边界)​,目的是让两个指针最终精确地汇合于答案点。
while (left <= right)​ 用于在一个确定的区间内查找一个特定的值,搜索会持续到区间被彻底检查完毕(区间为空)。
如果改为( <= ) ​:当 left 和 right 最终指向同一个元素(即最小值)时,因为 left == right,循环条件 left <= right 依然成立,会进入下一次循环

此时 mid = left + (right - left)/2 = left。
判断 nums[mid] <= nums[right](即 nums[left] <= nums[left]),条件成立,会执行 right = mid。
这导致 right 的值不变(right = left),然后循环继续,left 和 right 的值不再变化,从而产生无限循环。

点击查看代码
class Solution {public int findMin(int[] nums) {int left = 0 , right = nums.length - 1;while(left < right){int mid = left + (right - left)/2;if(nums[mid] > nums[right]){left = mid + 1;}else if(nums[mid] <= nums[right]){right = mid;}}return nums[left];}
}

局部截取_20251003_172947
局部截取_20251003_195910
局部截取_20251003_200225
局部截取_20251003_200351
局部截取_20251003_210844

点击查看代码
class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {//先交换最小数组在前if(nums1.length >= nums2.length){int[] temp = nums1;nums1 = nums2;nums2 = temp;}//int m = nums1.length, n = nums2.length;int l = 0, r = m;// 搜索分割点位置,共m+1种可能while(l <= r){int i = l + (r - l)/2 ;int j = (m + n + 1)/2 - i;//int nums1Left = (i == 0) ? Integer.MIN_VALUE : nums1[i - 1];int nums1Right = (i == m) ? Integer.MAX_VALUE : nums1[i];int nums2Left = (j == 0) ? Integer.MIN_VALUE : nums2[j - 1];int nums2Right = (j == n) ? Integer.MAX_VALUE : nums2[j];//if(nums1Left <= nums2Right && nums2Left <= nums1Right){if((m+n) % 2 == 1){//总和为奇数,中位数就是i-1 和 j-1 的最大值return Math.max(nums1Left,nums2Left);} else{//总和为偶数,中位数是 (i-1 和 j-1 的最大值)+ (i 和 j 的最小值) 整体除2 return (Math.max(nums1Left,nums2Left) + Math.min(nums1Right,nums2Right))/ 2.0;}}else if(nums1Left > nums2Right){r = i - 1;}else if(nums2Left >nums1Right){l = i + 1;}}
// 循环结束后必须返回
throw new IllegalArgumentException("No solution found");}
}
http://www.hskmm.com/?act=detail&tid=23787

相关文章:

  • 有关三角剖分的性质
  • 西门子通信-自制示意
  • Vue之刷新页面会触发的生命周期函数
  • 傅里叶的一生
  • Dos命令学习(新手)
  • 吴恩达深度学习课程一:神经网络和深度学习 第一周:深度学习简介
  • 实用指南:AI Agent开发平台如何设计?核心架构与工作流实战案例详解
  • Numercial result of HAA-DRSM
  • 防重复提交的实现
  • Day25错误(error)与异常(exception)的简单认识
  • 算法课第一次作业
  • 1. 对拍板子
  • Luogu P14122 [SCCPC 2021] Direction Setting题解 最小费用流
  • MySQL_基础
  • 5 qoj14553 序列与整数对 题解
  • AT_arc064_d [ARC064F] Rotated Palindromes
  • vscode代码块格式转换器
  • 二分模板
  • 如何控制事务?
  • C语言速成秘籍——跳转语句(goto) - 实践
  • 五子棋-下满了格子平局
  • 从免疫原性突破到技术迭代:全人源抗体如何重塑靶向治疗格局?
  • 工作感受月记(202510月)
  • 欧几里得算法与扩展欧几里得算法详解
  • 题解:AT_agc038_f [AGC038F] Two Permutations
  • 10.3 考试总结
  • CSP-S 复赛指南(2025年版)
  • AI元人文系列文章:AI元人文的未来——软硬件协同
  • 10.3考试反思
  • 10.2 考试总结