旋转数组的最小元素(改造二分法)
程序员文章站
2024-03-17 15:52:52
...
问题描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
输入描述
第一行为一个整数n,表示数组的长度第二行输入数组中各元素,输入保证符合题意
输出描述
输出一个数字,表示数组的最小元素
样例输入
5
3 4 5 1 2
样例输出
1
参考代码
#include<stdio.h>
int sort(int a[],int n){
int begin=0,end=n-1;
if(a[begin]<a[end])return a[begin];
while(end-begin>1)
{
int mid=begin+((end-begin)>>1);//防止溢出,移位更高效
if(a[mid]>=a[begin])
begin=mid;
else end=mid;
}
return a[end];
}
int main(){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("%d\n",sort(a,n));
return 0;
}