首页 > 代码库 > 小米13笔试编程题 2

小米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;}