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

LeetCode算法学习之寻找排序数组中的最小值

完整代码实现:

class Solution {public int findMin(int[] nums) {// Arrays.sort(nums);// return nums[0];//二分查找算法int left = 0;int right = nums.length - 1;while(left < right){int mid = left + (right - left)/2;if(nums[mid] > nums[right]){left = mid + 1;//说明最小值在右边部分}else{right = mid;  //说明最小值在左边部分}}return nums[left];}
}

算法思路(二分查找)
由于数组是旋转过的升序数组,它仍然具有部分有序的特性,可以利用二分查找高效地找到最小值。
关键观察
1. 旋转后的数组结构:
可以分成两个部分:

 左半部分:较大的元素,仍然保持升序(如 [4,5,6,7])。
右半部分:较小的元素,仍然保持升序(如 [0,1,2])。
最小值位于右半部分的第一个元素(即旋转点)。
2. 二分查找策略:
比较 nums[mid] 和 nums[right]:
如果 nums[mid] > nums[right],说明 mid 在左半部分,最小值在右侧(mid + 1 到 right)。
否则,mid 在右半部分,最小值在左侧(left 到 mid)。
算法步骤
1. 初始化:
left = 0,right = nums.length - 1。
2. 循环条件:
当 left < right 时,继续搜索。
3. 计算中点:
mid = left + (right - left) / 2(防止整数溢出)。
4. 比较 nums[mid] 和 nums[right]:
如果 nums[mid] > nums[right]:
最小值在右侧,移动 left = mid + 1。
否则:
最小值在左侧或 mid 本身,移动 right = mid。
5. 终止条件:
当 left == right 时,循环结束,nums[left] 即为最小值。

http://www.dtcms.com/a/549324.html

相关文章:

  • 橡胶塑胶件AI视觉检测 光学筛选机
  • Android Studio新手开发第三十五天
  • 楚航科技全球首发4D卫星架构雷达,为高阶智能辅助驾驶升级感知边界
  • css3新增属性变形
  • 南凌科技SD-WAN全球组网方案技术解析:助力JINS完成600+门店数字化升级
  • 太原网站建设详细策划深圳网站设计招聘
  • 企业微信社群运营玩法有哪些?企业微信社群工具有哪些功能?——从拉新到留存的玩法设计与工具支撑
  • wordpress整站搬家首页空白问题怎么完整下载网站模板
  • AXI 4_FULL转AXI_Stream 流水线设计详解
  • TCP SYN 扫描发送器(重点:构造与发送)
  • 肺组织图像分类与肺癌图像分类数据集
  • 苏州哪个公司做网站好怎么建设
  • 【C++ 入门】:引用、内联函数与 C++11 新特性(auto、范围 for、nullptr)全解析
  • 打破协议壁垒——Profinet转ModbusTCP让逆变器与西门子PLC同频运行
  • 网站标题seo外包优化公司网络推广方案
  • Ming Lite 万能模型对标 GPT-4o 的多模态能力
  • 关于jupyter Notebook
  • 淘宝客网站设计网站开发岗位名称
  • 3.3 Lua代码中的协程
  • 11月即将召开-IEEE-机械制造方向会议 |2025年智能制造、机器人与自动化国际学术会议 (IMRA 2025)
  • 网页制作视频的网站建设天堂tv在线观看免费
  • Flink Keyed State 详解之六
  • Java static关键字深度解析
  • 对红色网站建设的建议个人logo创意设计免费
  • 沃航科技网站开发织梦网站打开慢
  • 自动驾驶中的传感器技术75——Navigation(12)
  • 基于Chrome140的TK账号自动化(关键词浏览)——运行脚本(三)
  • 多维尺度分析法(MDS)
  • 泰迪智能科技高校行业资源举例
  • 自动驾驶中的传感器技术73——Navigation(10)