码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-01-25 00:54:05      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:span   旋转   ref   ssi   array   com   排序数组   minimum   相等   

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

 

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

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

  • 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

标签:span   旋转   ref   ssi   array   com   排序数组   minimum   相等   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!