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

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

时间:2023-04-07 15:13:07浏览次数:34  
标签:153 right nums 旋转 最小值 数组 排序 输入 left

已知一个长度为 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

func findMin(nums []int) int {
    left, right := -1, len(nums)-1 // 开区间 (-1, n-1)
    for left+1 < right { // 开区间不为空
        mid := left + (right-left)/2
        if nums[mid] < nums[len(nums)-1] { // 蓝色
            right = mid
        } else { // 红色
            left = mid
        }
    }
    return nums[right]
}

 

标签:153,right,nums,旋转,最小值,数组,排序,输入,left
From: https://www.cnblogs.com/slowlydance2me/p/17296231.html

相关文章

  • UVA - 10905 Children's Game 字符串的排序
    题目大意:给出N个数字串,要求拼出有数字最大的串解题思路:用string就很好解决#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>usingnamespacestd;constintmaxn=60;stringstr[maxn];intcmp(stringa,stringb){ returna+b>b+a;}......
  • Java-Day-5(数组 + 排序 + 查找 + 二维数组)
    Java-Day-5数组可以存放多个同一类型的数据,属于引用类型动态初始化语法:数据类型数组名[]=new数据类型[大小]例:int[]a=newint[5]或:doublea[]=newdouble[n]使用(引用/访问/获取)时,初始下标(索引)是从0开始,第一个数=a[0]获取长度:数组名.length......
  • 题目 1023: [编程入门]选择排序
    找出数组无序区中的最小值(最大值),与无序区中第一个数(最后一个数)交换。例子:52314第一轮无序区最小值是1,将1和无序区中一个数交换:12354。有序区:1,无序区:2354第二轮无序区最小值是2,因为2就是无序区的第一个数,所以不用交换:12354。有序区:12,无序区:354第三轮无序......
  • java -- System类和冒泡排序
    Systemjava.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。System类私有修饰构造方法,不能创建对象,直接类名调用。exit//终止当前运行的Java虚拟机,非零表示异常终止publicstaticvoidexit(intstatus)currentTimeMillis//返回当前时间(......
  • HashMap排序方法,少见的toArray转为Array 泛型数组 排序,而非ArrayList
        HashMap<String,Integer>hm=newHashMap<>();    hm.put("a",1);    hm.put("c",2);    hm.put("b",3);         Set<Entry<String,Integer>>entrySet=hm.entrySet();      ......
  • C# List按照自定义的顺序去排序
    有没有遇到过产品经理说表格输出排序要按照指定的人员列表去排序?经过一番研究搜查发现一个方法可以实现话不多说上例子 publicclassUserInfo{publicstringName{get;set;}publicstringInfo{get;set;}} List<UserInfo>userInfos=newList<Use......
  • 王道C语言笔记NOTE-中级阶段Note8-排序算法真题实战
    一、2016年43题1、问题描述2、答案解析(1)、算法的基本设计思想由题意知,将最小的n/2个元素放进A1中,剩余元素放在A2中,分组结果即可满足题目要求。仿照快速排序的思想,基于枢轴把n个整数划分成两个子集,根据划分后枢轴所处的位置i分别处理:①、若i=n/2,则分组完成,算法结束;②、若i<......
  • Map自定义key,然后把value的集合List进行指定字段排序
    packagecom.zdft.purchase;importcom.google.common.collect.Lists;importjava.util.*;importjava.util.stream.Collectors;publicclassStudentMethod{//需求:Map自定义key,然后把value的集合List进行指定字段排序;例如:多次考试,取最高分的集合展示publics......
  • 列表中有整数、有特殊字符、有字母的排序问题
    列表中有整数、有特殊字符、有字母a=[2,1,3,5,4,'d','f','e','c','a','b','?','*','&']#定义一个函数defsort1(x):ifisinstance(x,int):  #判断传入的参数中是否有整数returnx #有整数返回整数本身......
  • 元素的多重排序
    应用场景:渲染用户界面时,因为关键的消息和特殊的事件应该优先显示在其他信息之前。numbers=[8,3,1,2,5,4,7,6]//原始数据group={8,3,5,7}//优先级高的数据,defsort_priority(numbers,group):found=Falsedefhelper(x):nonlocalfoun......