力扣hot100:寻找旋转排序数组中的最小值

题目描述:

思路分析:

本题可以借用二分查找的思路:设 x=nums[mid] 是现在二分取到的数。我们需要判断 x 和数组最小值的位置关系,谁在左边,谁在右边?把 x 与最后一个数 nums[n−1] 比大小:

如果 x>nums[n−1],那么可以推出以下结论:1.nums 一定被分成左右两个递增段;2.第一段的所有元素均大于第二段的所有元素;3.x 在第一段。4.最小值在第二段。5.所以 x 一定在最小值的左边。

如果 x≤nums[n−1],那么 x 一定在第二段。(或者 nums 就是递增数组,此时只有一段。)

x 要么是最小值,要么在最小值右边。

所以,只需要比较 x 和 nums[n−1] 的大小关系,就间接地知道了 x 和数组最小值的位置关系,从而不断地缩小数组最小值所在位置的范围,二分找到数组最小值。

代码:

java 复制代码
class Solution {
    public int findMin(int[] nums) {
        int n=nums.length;
        int right=n-1;
        int left=0;
        while(left<right){
            int mid=(right-left)/2+left;
            if(nums[mid]<nums[n-1]){
                right=mid;
            }else{
                left=mid+1;
            }
        }
        return nums[right];
    }
}

代码分析:

终止条件为left<right,如果是<=则可能会一直走if(nums[mid]<nums[n-1])的情况导致死循环。

left=mid+1是因为如果mid在第一段,则最小值一定在left的右边。

相关推荐
C雨后彩虹1 天前
任务最优调度
java·数据结构·算法·华为·面试
少林码僧1 天前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)1 天前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
Niuguangshuo1 天前
EM算法详解:解密“鸡生蛋“的机器学习困局
算法·机器学习·概率论
a3158238061 天前
Android 大图显示策略优化显示(一)
android·算法·图片加载·大图片
一条大祥脚1 天前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
鲨莎分不晴1 天前
反向传播的数学本质:链式法则与动态规划的完美共舞
算法·动态规划
sonadorje1 天前
逻辑回归中的条件概率
算法·机器学习·逻辑回归
cici158741 天前
基于Pan-Tompkins算法的ECG信号HRV提取方案
算法
McGrady-1751 天前
拓扑导航 vs 几何导航的具体实现位置
算法