旋转数组中的最小元素

旋转数组中的最小元素

http://www.nowcoder.com/questionTerminal/7dd312bb4e7c4546a9aa8a001c2b11f5

题解

题目难度:简单

知识点:排序、查找

解题思路:这道题看起来就是找最小值,如果从头到尾进行比较是一种思路,缺点时总体的计算次数较多;进一步思考由于数是有一定大小规则进行排序的,所以可以使用二分法进行计算。

方法一(简单粗暴一个一个比较)

这道题就是输出较小数据,直接一个一个比较大小,然后输出符合要求的数据即可。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int temp;
    cin>>temp;
    int num;
    while(cin>>num)
    {
        if(temp>num)
            temp=num;
    }
    cout<<temp<<endl;
}

方法二

使用二分法进行查找
注意:使用二分法时,要考虑数据可能存在的前后重复性;假设原始数据为“567811111”,这时需要进行特别的二分处理。

#include<bits/stdc++.h>
using namespace std;
int main(){
   vector<int>array;
   int n;
   while(cin>>n)
       array.push_back(n);
   int l=0;
   int r=array.size()-1;
   while(l<r) 
   {
        int mid=(l+r)/2;
        if(array[mid]>array[r])
             l=mid+1;           
        else if(array[mid]<array[r])
             r=mid;
       //需要注意的是必须考虑数据重复的可能性
        else r=r-1;     
   }
   cout<<array[l]<<endl;
   return 0;
}
全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务