题解 | #旋转数组的最小数字#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
旋转数组的最小数字
- 暴力搜索法
- 双指针法(以为数组比较大小)
- 二分法(部分有序)
二分法确定 right= middle
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
// Method 1
// int len = rotateArray.size();
// if (len == 0){
// return 0;
// }
// else if (len == 1){
// return rotateArray[0];
// }
// else{
// for (int i = 1; i<len; i++){
// if (rotateArray[i-1] > rotateArray[i]){
// return rotateArray[i];
// }
// }
// }
// return rotateArray[0];
// Method 2
// int len = rotateArray.size();
// if (len == 0){
// return 0;
// }
// else if (len == 1){
// return rotateArray[0];
// }
// else{
// int low = 0;
// int high = len-1;
// while(low < high){
// if(rotateArray[low] >= rotateArray[high]){
// low ++;
// }
// else{
// high --;
// }
// }
// return rotateArray[low];
// }
// Method 3 binary search
// int len = rotateArray.size();
// if (len == 0){
// return 0;
// }
// else if (len == 1){
// return rotateArray[0];
// }
// else{
// int left = 0;
// int right = len-1;
// int mid = len/2;
// while(left<right){
// if(rotateArray[left] < rotateArray[right]){
// return rotateArray[left];
// }
// mid = left + (right-left)/2;
// if(rotateArray[mid]>rotateArray[left]){
// left = mid+1;
// }
// else if(rotateArray[mid]<=rotateArray[left]&& rotateArray[mid]<rotateArray[right]){
// right = mid;
// }
// else{
// left ++;
// }
// }
// return rotateArray[left];
// }
// Method 4
int min = rotateArray[0];
for (auto val: rotateArray){
min = val<min?val:min;
}
return min;
}
};