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

题目描述:

思路分析:

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

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

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

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

所以,只需要比较 x 和 numsn−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(numsmid<numsn-1)的情况导致死循环。

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

相关推荐
天天喝旺仔13 分钟前
Git 内部原理深度解析:从 blob/tree/commit 对象到 packfile 与垃圾回收
数据结构·数据库·git·算法·哈希
AIGCmagic社区14 分钟前
KITTI AbsRel从6.5压到5.4,Marigold V2用一张32GB卡把编辑DiT收成单步深度估计
人工智能·算法·aigc·ai多模态
青少儿编程课堂16 分钟前
多源最短路与最小环(Floyd 算法图论解析)
c++·python·算法·bfs·信息学竞赛
6Hzlia24 分钟前
【Classic 150 刷题计划】 LeetCode 228. 汇总区间 | C++ 锚点游标与断点检测法
c++·算法·leetcode
Edward The Bunny38 分钟前
Leetcode Hot 100
数据结构·算法
hans汉斯41 分钟前
数据挖掘|基于BP神经网络的少数民族村寨文化型旅游体验产品潜在游客挖掘
深度学习·神经网络·算法·yolo·软件工程·bp·汉斯出版社
v_348360876210 小时前
Android native端 堆栈打印
android·算法
residual_fan10 小时前
【学术论文】航空发动机故障诊断智能体:基于持续对比强化学习的动态优化方法
人工智能·算法·数据挖掘·数据分析
GreenTea11 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
深圳满意度咨询12 小时前
医院满意度数字化测评系统:从数据采集到智能决策的技术实践
算法