题目分析:
在递增的旋转数组中找到最小的数(数组中可能存在重复数)。
解题思路:
两种方法实现
方法1:从后向前一遍遍历扫描实现
方法2:利用二分查找实现。
实现程序
class Solution { public: //从后向前扫描实现 int findMin1(vector<int> &nums) { if (nums.size() == 0) // 处理特殊情况 return -1; if (nums.size() == 1) return nums[0]; int j = nums.size() - 1; int min = nums[j]; for (j = j - 1; j >= 0; j--) // 一遍遍历扫描判断 { if (nums[j] < min) { min = nums[j]; } } return min; } //二分查找实现 int findMin(vector<int> &nums) { if (nums.size() == 0) // 处理特殊情况 return -1; if (nums.size() == 1) return nums[0]; int size = nums.size() - 1; int begin = 0; int end = size; // 二分查找实现 while (begin < end && nums[begin] >= nums[end]) { int mid = (begin + end) / 2; if (nums[mid] < nums[begin]) { end = mid; } else if (nums[mid] == nums[begin]) // 调整出现数组数相等情况 { begin++; } else { begin = mid + 1; } } return nums[begin]; } };