題目:
原有一個有序數組(假設升序),分成前後兩部分,然後將這兩部分交換得到一個新的數組。寫一個函數,參數是這個新的數組,要求找到數組分開的那個結點,而且要考慮時間複雜度。
解法1:
解法2:
#include <iostream>
using namespace std;
int find(int a[], int i, int j)
{
if(i<0 || j<0)
return -1;
if(i>=j)
return i;
int mid=(i+j)/2;
if(mid==i)//j=i+1
return i;
if(a[mid]>a[i])
return find(a,mid,j);//這裏不能換成mid+1,否則會錯過那個節點
else
return find(a,i,mid-1);
}
int main()
{
int a[11]={5,6,7,8,9,10,0,1,2,3,4};
//int a[11]={0,1,2,3,4,5,6,7,8,9,10};
int len=sizeof(a)/sizeof(int);
int index=find(a,0,len-1);
if (index!=-1)
cout<<"the "<<index<<"th number:"<<a[index]<<endl;
}
the 5th number:10