53 寻找旋转排序数组中的最小值
1.问题描述
假设我们的数组是一个按照升序排序的数组在预先未知的某个点上进行了旋转得到的。
( 例如,数组 [3,5,6,0,1,2] ,可以知道是从[0,1,2,3,5,6] 旋转变来的 )。
请找出其中最小的元素。要求使用二分查找。
你可以假设数组中不存在重复元素。
示例 1:
输入: [3,4,5,1,2]
输出: 1
示例 2:
输入: [4,5,6,7,0,1,2]
输出: 0
2.输入说明
首先输入数组的长度n,然后输入n个整数
3.输出说明
输出一个整数
4.范例
输入
7
4 5 6 7 0 1 2
输出
0
5.代码
#include <iostream>
#include <queue>
#include <cstdlib>
#include <cstring>
#include<algorithm>
using namespace std;
int searchMatrix(vector<int> matrix)
{
//参考:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/solution/er-fen-cha-zhao-wei-shi-yao-zuo-you-bu-dui-cheng-z/
//二分查找
int low = 0;
int high = matrix.size() - 1;
while (low < high)
{
int mid = (low + high) / 2;
if (matrix[mid] > matrix[high])//中值大于右值,说明最小值在右边,缩小左边界
low = mid + 1;
else if (matrix[mid] < matrix[high])//缩小右边界
high = mid;
}
return matrix[low];
}
int main()
{
int n,num;
vector<int>matrix;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> num;
matrix.push_back(num);
}
int res = searchMatrix(matrix);
cout << res << endl;
return 0;
}