首页 > 编程语言 > 详细

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

时间:2020-01-25 00:55:10      阅读:107      评论:0      收藏:0      [点我收藏+]

转跳点:--\(˙<>˙)/--

 

  原本打算大年三十十一起写完的,结果这篇拖到了年初一……

  这道题比刚刚那道,麻烦一点,因为有重复,所以我们需要考虑重复的情况,就是刚刚的两种情况变成了三种:

  • mid < right:left = mid+1
  • mid > right:right = left;
  • mid = right:left++;

为什么是++?题目说了升序,如果相等那么说明只有两种可能

  1. 整个数组都是一个数
  2. 旋转点极有可能就是这个数(貌似和解题无关)

所以无论如何那种情况,题设想要的最小值一定得往后判断,全数组一样也得往后,因为输入的代码需要通用性。如果非要 -- 也可以,不过得从right--,并且left = mid。

 

  代码如下:

 1 int findMin(int* nums, int numsSize){
 2     int low = 0, high = numsSize-1;
 3     while (low < high)
 4     {
 5         if (nums[low] < nums[high])
 6         {
 7             return nums[low];
 8         }
 9         int mid = low + (high - low) / 2;
10         if (nums[mid] > nums[high])
11         {
12             low = mid + 1;
13         }
14         else if (nums[mid] < nums[high])
15         {
16             high = mid;
17         }
18         else
19         {
20             low++;
21         }
22     }
23     return nums[low];
24 }

 

  算法不易,诸君共勉!

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

原文:https://www.cnblogs.com/daker-code/p/12232719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!