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

技术153. 寻找旋转排序数组中的最小值 153. 寻找旋转排序数组中的最小值描述
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums =

13.在旋转排序数组中找到最小值。

描述

长度为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-1]。

给你一个数组nums,它的元素值彼此不同。它原本是一个按升序排列的数组,根据上面的情况旋转了几次。请查找并返回数组中最小的元素。

链接

53.求旋转排序数组中的最小值-LEET码(leetcode-cn.com)

解法:二分法

注意需要处理一下细节

1类解决方案{

2 public int FindMIn(int[]nums){ 0

3 int left=0,right=nums . length-1;

4 while(左右){ 0

5 int mid=左(右-左)/2;

7 //如果nums[mid]=nums[right],则表示nums[mid]左侧为上升区间,右侧为无序区间。

8 //那么最小值将是区间无序的区块。

9 if(nums[mid]=nums[right]) {

左10=中1;

11 }

12 /*由于nums[mid]可能是目标值,

13如果最小值是target,则nums[mid]=target,

14直接返回mid,这意味着右边界应该包含mid值*/

15 else {

16右=中;

17 }

18 }

19返回nums[左];

20 }

21 }

1类解决方案{

2 public int FindMIn(int[]nums){ 0

3 int left=0,right=nums . length-1;

4 while(左=右){ 0

5 int mid=左(右-左)/2;

7 //如果nums[mid]=nums[right],则表示nums[mid]左侧为上升区间,右侧为无序区间。

8 //那么最小值将是区间无序的区块。

9 if(nums[mid]=nums[right]) {

左10=中1;

11 }

12 /*由于nums[mid]可能是目标值,

13如果最小值是target,则nums[mid]=target,

14直接返回mid,这意味着右边界应该包含mid值*/

15 else {

16右=中;

17 }

18 }

19返回nums[左];

20 }

21 }

此时(while (left=right)),您需要返回数字[right]

1类解决方案{

2 public int FindMIn(int[]nums){ 0

3 int left=0,right=nums . length-1;

4 while(左=右){ 0

5 int mid=左(右-左)/2;

7 //如果nums[mid]=nums[right],则表示nums[mid]左侧为上升区间,右侧为无序区间。

8 //那么最小值将是区间无序的区块。

9 if(nums[mid]=nums[right]) {

左10=中1;

11 }

12 /*由于nums[mid]可能是目标值,

13如果最小值是target,则nums[mid]=target,

14直接返回mid,这意味着右边界应该包含mid值*/

15 else {

16右=中;

17 }

18 }

19返回nums[右];

20 }

21 }

总结

1.最小值将在中间无序区间的一侧,因此right=mid是起点。

2.while (left right),离开循环时是left=right,此时left=right=mid,可以返回numbers [left]也可以返回numbers[right];

但是当(left=right)时,输出循环是从左向右的,所以它应该返回数字[right]

请看下面的代码输出。

1类解决方案{

2 public int FindMIn(int[]nums){ 0

3 int left=0,right=nums . length-1;

4 while(左=右){ 0

5 int mid=左(右-左)/2;

7 //中文字幕仅供学习交流,严禁用于商业用途。中文字幕仅供学习交流,严禁用于商业用途。中文字幕仅供学习交流,严禁用于商业用途。中文字幕仅供学习交流,严禁用于商业用途。中文字幕仅供学习交流,严禁用于商业用途。中文字幕仅供学习交流,严禁用于商业用途

8/…在这种情况下

9 if(num[中]=num[右])

左10=中1;

11 }

12 /*吴登盛[中]吴登盛,

13目标、数字[中]=目标,

14日中午返国,右日终日终日终日终日终日止*/

15其它[

16右=中;

17 }

18系统。出去。println(' num[mid]: ' num[mid]);

19 }

20系统。出去。println(' num[left]: ' nums[left]);

21系统。出去。println(' num[right]: ' num[right]);

22

23返回n[右];

24 }

25 }

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/126077.html

(0)

相关推荐

  • 执行linux命令清理服务器缓存并返回结果怎么实现

    技术执行linux命令清理服务器缓存并返回结果怎么实现这篇文章主要讲解了“执行linux命令清理服务器缓存并返回结果怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“

    攻略 2021年11月30日
  • 真丝裙,真丝裙贱上水就有痕迹怎么办

    技术真丝裙,真丝裙贱上水就有痕迹怎么办真丝绸的一个特性就是局部沾水后容易形成水渍痕迹。这是真丝纤维本身亲水性太强、局部在沾水后真丝裙,纤维大分子沾到水的部位,水分子跟纤维上的亲水性基团比如羟基(-OH)、氨基(-NH)发

    生活 2021年10月30日
  • 递归、匿名函数及列表、字典生成式

    技术递归、匿名函数及列表、字典生成式 递归、匿名函数及列表、字典生成式递归、匿名函数及列表、字典生成式1、递归函数
    # 1、递归函数
    # 递归函数就是函数在执行的时候直接或间接的调用函数本身的函数
    ''

    礼包 2021年11月19日
  • KindEditor

    技术KindEditor KindEditor - 支持word上传的富文本编辑器?
    图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码
    目前限chrome浏览

    礼包 2021年11月25日
  • 怎么理解MySQL存储过程和触发器

    技术怎么理解MySQL存储过程和触发器这期内容当中小编将会给大家带来有关怎么理解MySQL存储过程和触发器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。存储过程(stored proc

    攻略 2021年11月20日
  • CentOS 6.5中如何搭建MySQL集群7.4

    技术CentOS 6.5中如何搭建MySQL集群7.4小编给大家分享一下CentOS 6.5中如何搭建MySQL集群7.4,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!各节点信息如下:管理节点:192.

    攻略 2021年11月15日