小米13笔试编程题 2

有一个数组(非递减),旋转了不知道多少个位,在该数组中找一个数的下标。写出代码(用C/C++或者java)

并分析时间空间复杂度,考虑效率(很重要)。

eg:数组 [6,7,1,2,3,4,4] 找3,返回4;

函数原型

C/C++:

int find(int * a,int n,int count) count为a数组长度;n为要查找的数

Java:

int find(int []a,int n)

方法:二分查找,插值查找,Fibonacci查找

二分查找如下:

#include<iostream>;
using namespace std;

int find(int *a,int n,int count){
    int end=n-1,start=0;
    while(start<=end){
        int min=(end+start)/2;
        if(a[min]<n)
            start=min+1;
        else if(a[min]>n)
            end=min-1;
        else
            return min;
    }
}

int main(){
    int a[]={1,2,3,4,5,6,7,8};
    int b=find(a,6,8);
    cout<<b<<endl;
}

 

小米13笔试编程题 2,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。