//查找算法 - 寻找旋转排序数组中的最小值
//
//题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。请找出其中最小的元素。
//
//问题函数定义:
//
//cpp
//int findMin(vector<int>&nums) {
// // 函数实现
//}
//使用二分查找法时间复杂度才O(logn),使用遍历每个元素要O(n),使用sort()函数排序要O(nlogn)
//裁判测试程序样例:
//
//cpp
#include <iostream>
#include <vector>
using namespace std;
int findMin(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
if (nums[left] < nums[right]) {
return nums[left];
}
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] > nums[right]) {
left = mid + 1;
}
else {
right = mid;
}
}
return nums[left];
}
int main() {
vector<int> nums1 = { 3, 4, 5, 1, 2 };
cout << findMin(nums1) << endl; // 输出: 1
vector<int> nums2 = { 4, 5, 6, 7, 0, 1, 2 };
cout << findMin(nums2) << endl; // 输出: 0
return 0;
}
//输入样例:
//
//[3, 4, 5, 1, 2]
//输出样例:
//
//1