153. 寻找旋转排序数组中的最小值

本题要求在旋转排序数组中寻找最小值。例如:

输入:nums = 3,4,5,1,2 输出:1

解题思路:通过比较二分值x与数组末尾元素nums.back()来判断x的位置:

  • 若x <= nums.back(),说明x位于第二段递增序列,此时x可能是最小值或在最小值右侧
  • 若x > nums.back(),说明x位于第一段递增序列,x必定在最小值左侧

通过不断二分缩小范围,最终循环结束时指向的元素即为最小值,返回其下标即可。

cpp 复制代码
class Solution {
public:
    int findMin(vector<int>& nums) {
        int left = -1,right = nums.size() - 1;
        while (left + 1 < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < nums.back()) {
                right = mid;
            }else{
                left = mid;
            }
        }
        return nums[right];
    }
};

时间复杂度:O(logn)

空间复杂度:O(1)

相关推荐
ShineWinsu19 小时前
对于C++:IO流状态的详细解析
c++·面试·io·cin·io流状态·goodbit·failbit
数模竞赛Paid answer20 小时前
2026年中青杯数学建模A题数学建模论文智能评估系统与多智能体优化方法求解全过程论文及程序
算法·数学建模·中青杯
银-豆豆20 小时前
数据结构与算法-动态规划、回溯与贪心
算法·动态规划
Lzg_na20 小时前
constexpr的优势
c++
想吃火锅100521 小时前
【leetcode】200. 岛屿数量
算法·leetcode·职场和发展
王维同学1 天前
进程模块枚举、映像身份与线程启动地址关联
c++·windows·安全
hold?fish:palm1 天前
24 回文链表
数据结构·c++·链表
举手1 天前
Dispatcher模块剖析
linux·c++
Nil2081 天前
leetcode 54螺旋矩阵
算法·leetcode·矩阵
依然鸣1 天前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论