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

Posted daker-code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了154. 寻找旋转排序数组中的最小值 II相关的知识,希望对你有一定的参考价值。

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

 

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

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

  • 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的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode.154 - 寻找旋转排序数组中的最小值 II(二分思想)

LeetCode(算法)- 154. 寻找旋转排序数组中的最小值 II

LeetCode(算法)- 154. 寻找旋转排序数组中的最小值 II

剑指 Offer 11. 旋转数组的最小数字 154. 寻找旋转排序数组中的最小值 II 二分

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

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