已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
若旋转 4 次,则可以得到 [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 ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。

示例 1:

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

解题思路

分成3钟情况讨论
7 8 9 1 2 3 4 5 6
nums[l]<nums[mid]
情况一:nums[l]=1 nums[mid]=3 nums[r]=5 在左边区间招找
情况二:nums[l]=7 nums[mid]=9 nums[r]=2 在右边区间找

7 8 9 1 2 3 4 5 6
nums[l]=7 nums[mid]=3
nums[l]>nums[mid] 所以可以确定最小值只会在左边区间产生

2 3 4 5 6 1
nums[l]=nums[mid]=6 nums[r]=1
nums[l]==nums[mid] 结果只会在nums[l]和nums[r]中产生,选出最小值即可

代码

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

leetcode 153. 寻找旋转排序数组中的最小值(二分查找)相关推荐

  1. 65. Leetcode 153. 寻找旋转排序数组中的最小值 (二分查找-局部有序)

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

  2. LeetCode 153. 寻找旋转排序数组中的最小值(二分)

    153. 寻找旋转排序数组中的最小值 题意 给定一个无重复元素的升序旋转数组 找出旋转数组的最小值 二分法 mid是向下取整:left相对于mid移动 只要中值小于nums[right],说明最小值一 ...

  3. LeetCode 153. 寻找旋转排序数组中的最小值【c++/java详细题解】

    目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组 nums = [0,1, ...

  4. Leetcode 153. 寻找旋转排序数组中的最小值 解题思路及C++实现

    解题思路:二分查找 使用二分查找来寻找最小值. left,right,mid分别代表数组中最左边.中间.最右边的元素.这三个数字在旋转数组中的大小比较总共有三种情况. 1.数组是升序的,即 nums[ ...

  5. php旋转数组找出最小的,LeetCode 153 寻找旋转排序数组中的最小值

    链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ...

  6. Leetcode 153. 寻找旋转排序数组中的最小值 (每日一题 20211014)

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

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

    题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转.例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] . 题解 二分查找 代码 class Soluti ...

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

    153. 寻找旋转排序数组中的最小值 golang Me func findMin(nums []int) int {if len(nums) < 2 {return nums[0]}i, j ...

  9. LeetCode 154. 寻找旋转排序数组中的最小值 II (二分)

    154. 寻找旋转排序数组中的最小值 II 题意 给定一个包含重复元素的升序旋转数组 找出旋转数组的最小值 二分法 class Solution {public int findMin(int[] n ...

最新文章

  1. 子段乘积(逆元费马小定理)+线段树做法
  2. 捣鼓 Subversion
  3. 软件工程:需求分析的20条法则
  4. 70. Leetcode 701. 二叉搜索树中的插入操作 (二叉搜索树-基本操作类)
  5. html登录后记住用户名,完成登录功能,用session记住用户名
  6. java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum
  7. apache ignite_Kubernetes集群上的Apache Ignite和Spring第3部分:测试应用程序
  8. Eigen(5)Array类和元素级操作
  9. Hadoop不适合哪些场景 哪些场景适合?
  10. pb怎么设置 allow editing_Deno TCP Echo Server 是怎么运行的?
  11. 桌面消息提醒_手机消息总是延迟,真的是网速不行?3招教你找出捣鬼设置
  12. 只学一门java可行吗,java可以作为第一门编程语言学习吗
  13. 手动挖第一桶金,10日赚3十万元
  14. python模拟浏览器下载文件_模拟浏览器下载文件?
  15. 《贝叶斯思维:统计建模的Python学习法》——2.5 封装框架
  16. git 日常 常用命令
  17. Silverlight Quick Starts翻译(二):第一章 创建一个Silverlight工程
  18. 分享一个圆角自定义的漂亮AlertDialog
  19. Atitit  如何让精灵控件运动
  20. 原生小程序 引入vant-weapp 组件库 和 WeUI组件库

热门文章

  1. 大牛用SSM框架实现了支付宝的支付功能,满满干货指导
  2. 35. 搜索插入位置-LeetCode
  3. 连接sqlexpress
  4. 【More Effective C++】Item 6
  5. HTML 页面源代码布局介绍
  6. The slave I/O thread stops(equal MySQL server ids)
  7. 删除.svn文件夹方法(转)
  8. angularjs 上传
  9. numpy数组提取一定规律的数据
  10. 05 MapReduce应用案例01