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)

相关推荐

  • 如何解决ubuntu apache2无法打开php问题

    技术如何解决ubuntu apache2无法打开php问题这篇文章将为大家详细讲解有关如何解决ubuntu apache2无法打开php问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获

    攻略 2021年12月9日
  • PHP TronTool开发包有哪些特性

    技术PHP TronTool开发包有哪些特性本篇内容主要讲解“PHP TronTool开发包有哪些特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP TronTool开

    攻略 2021年11月26日
  • PHP BnbTool开发包有哪些特性

    技术PHP BnbTool开发包有哪些特性本篇内容介绍了“PHP BnbTool开发包有哪些特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年11月26日
  • 开源分布式图数据库有哪些(最牛的分布式数据库)

    技术开源分布式数据库RadonDB的核心技术与实现是怎样的开源分布式数据库RadonDB的核心技术与实现是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,

    攻略 2021年12月18日
  • Eclipse如何汉化

    技术Eclipse如何汉化这篇文章给大家分享的是有关Eclipse如何汉化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、安装好Eclipse2、下载专门负责 Eclipse 程序的多国语言

    2021年11月26日
  • 基于AWS学习的10个Linux命令分别是什么

    技术基于AWS学习的10个Linux命令分别是什么基于AWS学习的10个Linux命令分别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在AWS上执行

    攻略 2021年10月21日