154. 寻找旋转排序数组中的最小值 II
Posted daker-code
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了154. 寻找旋转排序数组中的最小值 II相关的知识,希望对你有一定的参考价值。
转跳点:--(˙<>˙)/--
原本打算大年三十十一起写完的,结果这篇拖到了年初一……
这道题比刚刚那道,麻烦一点,因为有重复,所以我们需要考虑重复的情况,就是刚刚的两种情况变成了三种:
- mid < right:left = mid+1
- mid > right:right = left;
- mid = right:left++;
为什么是++?题目说了升序,如果相等那么说明只有两种可能
- 整个数组都是一个数
- 旋转点极有可能就是这个数(貌似和解题无关)
所以无论如何那种情况,题设想要的最小值一定得往后判断,全数组一样也得往后,因为输入的代码需要通用性。如果非要 -- 也可以,不过得从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