已知数组A[0..n-1]和数组大小n(升序数组,元素值各不相同),若存在A[i]=i则称该数组有魔术索引,请判断该数组是否存在魔术索引,返回值为bool,要求复杂度优于o(n)。
测试样例:
[1,2,3,4,5]
返回:false
import java.util.*; public class MagicIndex { public boolean findMagicIndex(int[] A, int n) { // write code here if(A==null || A.length==0) return false; return findMagicIndex(0,n-1,A); } static boolean findMagicIndex(int i,int j,int[]A){ if(A[i]==i || A[j]==j) return true; if(i<j){ if(A[i]>i || A[j]<i) return false; int h=i+(j-i)/2; return findMagicIndex(i,h,A) || findMagicIndex(h,j,A); } return false; } }
// 也是非常简单的二分查找了,一遍过 import java.util.*; public class MagicIndex { public boolean findMagicIndex(int[] A, int n) { // write code here return find(A, 0, n - 1); } private boolean find(int[] a, int lo, int hi) { if (lo > hi) { return false; } int mid = (lo + hi) / 2; if (a[mid] == mid) { return true; } else if (a[mid] > mid) { return find(a, lo, mid - 1); } else { return find(a, mid + 1, hi); } } }