#include<iostream>
using namespace std;
#include<vector>
/**
题目描述
在数组A[0..n-1]中,有所谓的魔术索引,满足条件A[i]=i。
给定一个升序数组,元素值各不相同,编写一个方法,判断在数组A中是否存在魔术索引。
请思考一种复杂度优于o(n)的方法。
给定一个int数组A和int n代表数组大小,请返回一个bool,代表是否存在魔术索引。
**/
class MagicIndex {
public:
bool findMagicIndex(vector<int> A, int n) {
// write code here
if(n<=0){
if(A[0]==0){
return true;
}
else{
return false;
}
}
else{
if(n==1){
if(A[0]==0){
return true;
}
else{
return false;
}
}
else{
// 采用二分法,递归实现
if(n%2==0){
n=int(n/2);
}
else{
n=int(n/2)+1;
}
if(A[n]==n){
return true;
}
else{
if(A[n]<n){
vector<int> b;
for(int i=n+1;i<A.size();i++){
b.push_back(A[i]);
}
return this->findMagicIndex(b,b.size());
}
else{
vector<int> b;
for(int i=0;i<n;i++){
b.push_back(A[i]);
}
return this->findMagicIndex(b,b.size());
}
}
}
}
}
};
int main(){
vector<int> a;
a.push_back(0);
a.push_back(1);
a.push_back(3);
a.push_back(5);
a.push_back(6);
MagicIndex helper;
cout<<helper.findMagicIndex(a,5)<<endl;
return 0;
}