力扣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的右边。

相关推荐
wabs6668 分钟前
关于图论【Kruskal算法|卡码网53.寻宝的思考】
数据结构·算法·图论·卡码网
hans汉斯10 分钟前
人工智能与机器人研究|面向无标签数据的三维场景语义理解方法研究
人工智能·神经网络·算法·信息可视化·cnn·机器人
阿坤带你走近大数据9 小时前
基金面试准备1
面试·职场和发展
小程故事多_8010 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_9561219712 小时前
二分算法(知识点+题目)
c++·算法
AndrewHZ15 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
职场的momo15 小时前
五年后端终面被追问方案,技术输出该如何守边界
职场和发展
小星星闪亮登场16 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
冻柠檬飞冰走茶16 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
玖玥拾16 小时前
LeetCode 88 合并两个有序数组
算法·leetcode