当前位置: 首页 > news >正文

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

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

思路:

其实题目有一个隐含条件,那就是如果数组旋转过且不为递增的顺序,那么最左侧的值一定是大于最右侧的值的,所以我们根据判断下标为mid处数组的值与下标为h处的值即可锁定最小值所在的范围,如果nums[mid]小于nums[h],那么最小值可能出现在l~mid处,反之,最小值出现在mid+1~h处。

代码实现如下:

class Solution {public int findMin(int[] nums) {int l = 0;int h = nums.length - 1;while (l < h) {int mid = l + (h - l) / 2;if (nums[mid] < nums[h]) {h = mid;} else {l = mid + 1;}}return nums[l];}
}

 

http://www.lryc.cn/news/60549.html

相关文章:

  • Linux 文件描述符
  • 第17章_反射机制
  • 使用VBA小程序提高资产清查效率
  • JavaSE学习进阶day07_02 异常
  • 操作系统学习笔记
  • 【Spring Boot】SpringBoot设计了哪些可拓展的机制?
  • 《程序员面试金典(第6版)》面试题 10.10. 数字流的秩
  • 智能洗地机好用吗?值得入手的洗地机推荐
  • Spring Security实战(一)——基于内存和数据库模型的认证与授权
  • 轻松掌握FFmpeg编程:从架构到实践
  • 桌面应用程序开发攻略(初步了解)
  • 【李老师云计算】HBase+Zookeeper部署及Maven访问(HBase集群实验)
  • 第11章_常用类和基础API
  • Java语言数据类型与c语言数据类型的不同
  • C# Replace()、Trim()、Split()、Substring()、IndexOf() 、 LastIndexOf()函数
  • C++类的理解与类型名,类的成员,两种定义方式,类的访问限定符,成员访问,作用域与实例化对象
  • 【华为OD机试真题 C++】1051 - 处理器问题 | 机试题+算法思路+考点+代码解析
  • Linux 常用操作命令大全
  • Git使用教程
  • substrate中打印调试信息的多种方式详解
  • Disentangled Graph Collaborative Filtering
  • Nginx快速上手
  • 【设计模式】实际场景解释策略模式与工厂模式的应用
  • 外包干了三年,算是废了...
  • 九龙证券|光模块概念股封单资金超3亿元,传媒板块涨停潮来袭
  • [ES6] 数组
  • 【问题描述】编写一个程序计算出球、圆柱和圆锥的表面积和体积。
  • Python 人工智能:16~20
  • 【华为OD机试真题】最优资源分配(javapython)
  • git的使用——操作流程