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

LeetCode 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 次得到输入数组。

解法

1.二分查找

解题思路

       本题重点在于,如何利用二分。二分的思想在于,每次淘汰一半(记住这个思想,是所有二分题目的关键)。
基于这个思想,我们要去想淘汰策略。我们发现本题中,有:最小元素 m 的左边所有元素都比数组的最后一个元素 x大,右边所有元素(不含x)都比 x 小。于是我们的淘汰策略为:对于每一对low high,比较中间元素值和x的大小:

  • nums[mid]<x:说明 mid 在 m 的右边,即目标 m 在 mid 的左边,故可淘汰右半边;
  • nums[mid]>x:同理淘汰左半边;
  • nums[mid]==x: 不可能,因为数组无重复值,如果成立,则必然有mid==n-1,则必然有low==high==n-1。但当low==high时,我们已经找到m
public int findMin(int[] nums) {int low = 0, high = nums.length - 1;int x = nums[high];while (low < high) { // 注意这里没有=了,=的时候直接退出循环得到答案int mid = (low + high) / 2;if (nums[mid] < x)high = mid;  //这里不是常规的 mid-1 是因为此时的mid有可能就是我们要找的melselow = mid + 1;  //这里和常规一样是 mid+1 是因为此时的mid不可能是m(他都比x大了噻怎么可能是最小的)}return nums[low];}

时间复杂度:时间复杂度为 O(logn),其中 n 是数组 nums 的长度。在二分查找的过程中,每一步会忽略一半的区间,因此时间复杂度为 O(logn)。

空间复杂度:O(1)。

http://www.dtcms.com/a/529018.html

相关文章:

  • 做外汇看什么网站怎样做建网站做淘客
  • 网站设计说明书800字o2o网站做推广公司
  • 【Linux】传输层协议UDP
  • 网站制作的主要流程零基础建设网站视频教程
  • Flutter 异步体系终章:FutureBuilder 与 StreamBuilder 架构优化指南
  • 刷题集(13)
  • 洮南市城乡和住房建设局网站深圳十大景观设计公司排名
  • discuz 旅游网站模版做外贸推广的网站有哪些
  • 遵义做百度网站一年多少钱定制开发网站如何报价单
  • 玛哈特整平机助力苹果17的不锈钢电池壳多重提升
  • 第 10 天:环境变量、别名与 Shell 自定义
  • 网站安全太复杂?雷池SafeLine+cpolar实现“躺平式”防护!
  • Spring环境配置与属性管理完全指南
  • Java_final关键字
  • 2025年9月电子学会全国青少年软件编程等级考试(scratch图形化一级)真题及答案
  • 信息化推进与网站建设网站seo分析报告案例
  • 网站域名 空间 是每年都要缴费吗查营业执照怎么查询
  • 网络嗅探抓包工具 Wireshark v4.6.0
  • spin_lock 能否 sleep ? 虚拟化场景
  • Qt布局管理停靠窗口QDockWidget类
  • STM32定时器输出PWM波
  • 重庆做网站开发的公司天津市建设工程交易管理网站
  • 网站源码是用什么做的爱链接购买链接
  • 数学 - 基础线性代数
  • 蓝牙网关是什么?能做什么?
  • Python入门与MySQL数据库操作实践指南
  • 广东网站设计服务商服装在线设计平台
  • 网站 刷流量 SEO中山建网站多少钱
  • 启动中国蚁剑antsword
  • 建行移动门户网站首页齐齐哈尔电话黄页