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)

相关推荐
枫叶林FYL7 分钟前
【自然语言处理 NLP】8.3 长文本推理评估与针在大海堆任务
人工智能·算法
智者知已应修善业9 分钟前
【51单片机1,左边4个LED灯先闪烁2次后,右边4个LED灯再闪烁2次:2,接着所用灯一起闪烁3次,接着重复步骤1,如此循环。】2023-5-19
c++·经验分享·笔记·算法·51单片机
米啦啦.9 分钟前
红黑树,,
数据结构·红黑树
xiaoye-duck15 分钟前
《算法题讲解指南:优选算法-队列+宽搜》--70.N叉树的层序遍历,71.二叉树的锯齿形层序遍历,72.二叉树的最大宽度,73.在每个树行中找最大值
数据结构·c++·算法·队列
代码改善世界16 分钟前
【C++初阶】双向循环链表:List底层结构的完整实现剖析
c++·链表·list
汀、人工智能17 分钟前
[特殊字符] 第98课:数据流中位数
数据结构·算法·数据库架构··数据流·数据流中位数
REDcker19 分钟前
C++ 包管理工具概览
开发语言·c++
Eloudy20 分钟前
不同特征值的特征向量互相正交的矩阵
人工智能·算法·机器学习
人道领域22 分钟前
【LeetCode刷题日记】:从 LeetCode 经典题看哈希表的场景化应用---数组、HashSet、HashMap 选型与算法实战
算法·leetcode·面试
努力努力再努力wz22 分钟前
【C++高阶系列】告别内查找局限:基于磁盘 I/O 视角的 B 树深度剖析与 C++ 泛型实现!(附B树实现源码)
java·linux·开发语言·数据结构·c++·b树·算法