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)

相关推荐

  • 抖音刷粉网址,抖音刷粉丝靠谱平台

    技术抖音刷粉网址,抖音刷粉丝靠谱平台抖音怎么涨粉丝比较快,抖音怎么做才会涨粉丝,学着点!抖音是一款深受大众喜欢的短视频app,虽然已经出现几年了,但是有很多用户的粉丝还是没有多少个。抖音刷粉平台有吗?这个肯定有的,而且有

    测评 2021年10月20日
  • 生成器与常见内置函数

    技术生成器与常见内置函数 生成器与常见内置函数异常捕获补充
    # 异常捕获的完整形式
    try:name
    except NameError as e:pass
    except Exception as e:p

    礼包 2021年11月23日
  • 刘羽冲偶得古兵书翻译,刘羽冲偶得古兵书 赏析

    技术刘羽冲偶得古兵书翻译,刘羽冲偶得古兵书 赏析看看刘羽冲的表现:他偶然得过一部古兵书,苦读了一年左右,自己感觉可以统领十万军兵冲锋陷阵了刘羽冲偶得古兵书翻译。正巧当时乡里出现土匪,刘羽冲就自己训练乡兵与土匪们打仗,

    生活 2021年10月29日
  • 度和千瓦时换算,度和千瓦时的换算是怎么的啊

    技术度和千瓦时换算,度和千瓦时的换算是怎么的啊千瓦时就是平时所说的“度”度和千瓦时换算,是电功的单位。瓦特是功率的单位。如果在功率上再乘以一个时间,那么这个结果就是功。1焦=1瓦×秒1千瓦时=1千瓦×1小时=1000瓦×

    生活 2021年10月25日
  • Sqllibs 笔记

    技术Sqllibs 笔记 Sqllibs 笔记Sqllibs
    报错注入
    Background 1
    基础函数version()——MySQL 版本
    user()——数据库用户名
    database()——数

    礼包 2021年12月23日
  • JS中的offsetwidth有什么作用

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

    攻略 2021年11月12日