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