问题描述:查找一个数是否存在于一个数组中。该数组分两段有序,第一段的数都大于第二段的数。要求:时间复杂度为O(logn)空间复杂度为O(1);
示例:6,7,8,9,1,2,3,4,5
1 #include <iostream>
2 using namespace std;
3
4 bool ExistofNum(int *array,int n,int num)
5 {
6 int start=0,end=n-1,mid=(n-1)/2;
7 while(start<end)
8 {
9 if(array[start]==num||array[end]==num||array[mid]==num)
10 return true;
11 if(array[mid]<num)
12 {
13 if(num<array[end])
14 start=mid+1;
15 else if(num>array[start])
16 end=mid-1;
17 }
18 else if(array[mid]>num)
19 {
20 if(num<array[end])
21 start=mid+1;
22 else if(num>array[start])
23 end=mid-1;
24 }
25 mid=(end-start)/2+start;
26 cout<<array[start]<<":"<<array[mid]<<":"<<array[end]<<endl;
27 }
28 return false;
29 }
30 int main()
31 {
32 int array[]={6,7,8,9,1,2,3,4,5};
33 int input=1;
34 while(input!=0)
35 {
36 cin>>input;
37 bool rtn=ExistofNum(array,9,input);
38 cout<<"result:"<<rtn<<endl;
39 }
40 return 0;
41 }
output:
[root@localhost Test]# ./a.out
10
6:7:9
6:6:6
result:0
9
6:7:9
result:1
8
6:7:9
8:8:9
result:1
7
6:7:9
result:1
6
result:1
5
result:1
4
2:3:5
4:4:5
result:1
3
2:3:5
result:1
2
2:3:5
result:1
1
result:1
0
2:3:5
4:4:5
5:5:5
result:0