0%

min-num-in-spinning-array

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。

题解

最小元素所在的位置就是旋转点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int minArray(vector<int>& numbers) {
int size = numbers.size();
if (!size)return -1;
int left = 0, right = size - 1;
while (left < right)
{
int m = (left + right) / 2;
if (numbers[m] > numbers[right])
left = m + 1;
else if (numbers[m] < numbers[right])
right = m;
else
right--;
}
return numbers[left];
}

一开始也想用二分法解决来着……但是没有写出来……还是要多学习。