//首先應該注意的是不過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; } };