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)

相关推荐
黑色火種15 分钟前
CCF CSP第一轮认证一本通
c++·csp·ccf·信奥赛·noi
不二青衣16 分钟前
牛客网50题
数据结构·c++·算法
定偶20 分钟前
C语言中整数编码方式(原码、反码、补码)
c语言·数据结构·编辑器
盛寒2 小时前
向量与向量组的线性相关性 线性代数
线性代数·算法
武当豆豆6 小时前
C++编程学习阶段性总结
开发语言·c++
学不动CV了6 小时前
C语言32个关键字
c语言·开发语言·arm开发·单片机·算法
小屁孩大帅-杨一凡7 小时前
如何解决ThreadLocal内存泄漏问题?
java·开发语言·jvm·算法
A7bert7777 小时前
【YOLOv8-obb部署至RK3588】模型训练→转换RKNN→开发板部署
linux·c++·人工智能·python·yolo
Y1nhl9 小时前
力扣_二叉树的BFS_python版本
python·算法·leetcode·职场和发展·宽度优先
zyx没烦恼9 小时前
五种IO模型
开发语言·c++