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)

相关推荐
利刃大大11 分钟前
【高并发服务器】三、正则表达式的使用
服务器·c++·正则表达式·项目
flashlight_hi1 小时前
LeetCode 分类刷题:1901. 寻找峰值 II
python·算法·leetcode
深瞳智检1 小时前
YOLO算法原理详解系列 第007期-YOLOv7 算法原理详解
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪
小何好运暴富开心幸福1 小时前
C++之再谈类与对象
开发语言·c++·vscode
郝学胜-神的一滴2 小时前
中秋特别篇:使用QtOpenGL和着色器绘制星空与满月
开发语言·c++·算法·软件工程·着色器·中秋
qiuiuiu4132 小时前
CPrimer Plus第十六章C预处理器和C库总结2-qsort函数
java·c语言·算法
JuneXcy3 小时前
C++知识点总结用于打算法
c++·算法·图论
ajassi20003 小时前
开源 C++ QT QML 开发(六)自定义控件--波形图
c++·qt·开源
_OP_CHEN3 小时前
C++基础:(八)STL简介
开发语言·c++·面试·stl