MS一面

来源:互联网 发布:java转换字符串编码 编辑:程序博客网 时间:2024/04/29 21:54

知道自己不足,才能进步!

今天太慌了,设备临时出现状况。第一次这么近接触,心里太紧张了,感觉自己肯定打上的,怎么就懵了。



现在把问题整理下

一个数组,它是在一个有序的数组下,循环移位得到的,但循环多少位不知道,查找里面的一个元素,要做到效率最低;


有思路了,也是二分查找,但是要变形!!!

#include <stdio.h>/*思路:将数组方成两段 前一段,后一段 ,之后再利用二分查找*/int binarySearch(int low1,int high1,int* a,int k){int mid1;while(low1<=high1){mid1=(low1+high1)/2;if(k == a[mid1]) {printf("5---%d\n",mid1);return mid1;}else if(k<a[mid1]) high1 = mid1-1;elselow1= mid1+1;}}int func(int low,int high,int*a,int k){int low1,high1,mid1;int mid;mid = (low+high)/2;  if(k == a[mid]){printf("1--%d\n",mid);return mid;}if(k == a[low]){printf("2-- %d\n",low);return low;}if(k == a[high]){printf("3--%d\n",high);return high;}if(k<a[mid] && k<a[low])      //11111{func(low,mid,a,k);return;}if(k>a[mid] && k>a[high])     //2222{func(mid,high,a,k);return;}if(k>a[mid] && k>a[low] && k>a[high] && ((k-a[mid]) > (k -a[low])))    //11111{func(low,mid,a,k);return;}if(k>a[mid] && k>a[high] && k>a[low] && ((k-a[mid]) < (k -a[low])))    //22222{func(mid,high,a,k);return;}if(k<a[mid] && k>=a[low] && k>a[high])     //1111{binarySearch(low,mid,a,k);}if(k>a[mid] && k<=a[high] && k<a[low])     //22222{binarySearch(mid,high,a,k);}return 0;}int main(){//int a[8] = {13,14,15,16,1,2,3,4};    //14, 2//int a[8] = {14,15,16,2,3,4,6,7};//int a[8] = {11,12,13,14,15,17,19,7};//int a[8] = {11,1,3,4,5,7,9,10};//int a[8] = {1,3,4,5,7,9,10,0};int n = sizeof(a)/sizeof(a[0]);int k;printf("input k : ");scanf("%d",&k);func(0,n-1,a,k);}


 

太乱了,但满足条件,复杂度小于n。
0 0
原创粉丝点击