//首先应该注意的是不过mid是否大于或者小于arr[mid],魔数都有可能出如今左边或者右边代码以下 import java.util.*; public class MagicIndex { public boolean findMagicIndex(int[] A, int n) { if(n == 0) return false; return findMagic(A, 0, n - 1); } public boolean findMagic(int [] A, int start ,int end){ if(start > end) return false; int mid = (start + end)/2; if(A[mid] == mid) return true; return findMagic(A, start, mid - 1) || findMagic(A, mid + 1, end); } }
一种更好的方案是下面这种方法java
class MagicIndex { public: bool findMagicIndex(vector<int> A, int n) { // write code here if(0 == n) return true; int i; for(i = 0; i < n;) { if(A[i] == i) return true; else if(A[i] < i) i ++; else i = A[i]; } return false; } };