首页 > 其他分享 >寻找旋转排序数组中的最小值---二分查找

寻找旋转排序数组中的最小值---二分查找

时间:2023-02-28 10:34:59浏览次数:49  
标签:二分 nums mid 旋转 --- 最小值 数组 升序 输入

寻找二分排序数组中的最小值

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。

给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [3,4,5,1,2]
输出:1
解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。
示例 2:

输入:nums = [4,5,6,7,0,1,2]
输出:0
解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。
示例 3:

输入:nums = [11,13,15,17]
输出:11
解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。

提示:

n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums 中的所有整数 互不相同
nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

见代码注释。依然按照区间划分的方法理解。二分到最后必然找到区间的端点。

code

class Solution {
public:
    
    //无论旋转多少次,总是两个部分有序的
    //具有明显的分界点
    //可以划分为两个区间,分别是>=nums[0]以及<nums[0]
    //需要查找的是右区间的左端点
    //问题:在升序序列中是没有小于nums[0],最后会找到最大值
    //解决方法:判断一下,如果非有序,那么必然有找到最小值并且<nums[0]

    int findMin(vector<int>& nums) {
        
        int l = 0,r = nums.size() -1;
        while(l < r)
        {
            int mid = (l + r) / 2;
            if(nums[mid] < nums[0]) r = mid;
            else l = mid + 1;
        }

        if(nums[l] < nums[0]) return nums[l];
        else return nums[0];
    }
};

标签:二分,nums,mid,旋转,---,最小值,数组,升序,输入
From: https://www.cnblogs.com/huangxk23/p/17163074.html

相关文章

  • oracle恢复数据using backup controlfile与until cancel的说明--转
    usingbackupcontrolfile与untilcancel的说明支持数据库版本:10gR2、11gR21.recoverdatabaseusingbackupcontrolfile2.recoverdatabaseuntilcancel3.recoverd......
  • pinia持久化‘pinia-plugin-persist‘
    Pinia是2019年由vue.js官方成员重新设计的新一代状态管理器,更替Vuex4成为Vuex5。 pinia的优点更好的支持vue3和Tsvuedevtools更好的支持pinia支持服务端渲染支持插......
  • 【2023-02-27】买点什么
    20:00要循序渐进,循序渐进,再循序渐进。从一开始工作,就要养成严格循序渐进的作风,积累知识。                        ......
  • npm install 报错 The package-lock.json file was created with an old version of n
    1.报错截图: 2 报错原因:npm版本过高,解决方法见第如下npminpm@6-g检测npm-vnpm版本版本已经降低再进行npminstall的操作就不会报错了。......
  • (转载)私人问卷收集系统-Surveyking问卷收集系统
    前言但凡提及问卷收集系统,问卷星与腾讯问卷通常都为大家首选问卷调查系统。担心数据安全,海量问卷管理不便,工作流创建困难?快速部署自有问卷调查系统开始你的问卷调查之旅......
  • 二分查找
    数组:【1,2,2,2,3,4,5,6】二分查找市返回2的位置,左侧边界和右侧边界的写法:intbinary_search(int[]nums,inttarget){intleft=0,right=nums.length-1;......
  • KingbaseES V8R6 集群运维案例 -- 归档失败导致 Switchover 失败
    案例说明:KingbaseESV8R6集群,备库在执行‘repmgrstandbyswitchover’时,切换失败,出现以下故障:经检查发现是主库归档配置错误,主库出现归档失败导致。适用版本:Kingbas......
  • day78-浏览器本地储存
    浏览器本地储存浏览器通过window.sessionStorage和window.localStorage属性来实现本地存储机制window.localStorage localStorage.setItemlocalStorage.setItem('na......
  • KingbaseES V8R6 备份恢复案例 -- 自定义表空间指定目录恢复
    ​案例说明:KingbaseESV8R6在通过sys_rman执行物理备份恢复时,可以通过参数‘--kb1-path’,指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空间映射,再......
  • java网络编程-并发服务端
    上次的服务端一次只能接受一个客户端的连接,性能实在堪忧,我们对服务端进行了改造,每接到一个客户端的请求,就新建一个线程,让新线程跟客户端进行交互,主线程可以继续等待其他客......