题目描述
定义有数组int a[200]={1,2,2,3,.....},数组元素都为正数,且a[i+1]>=a[i],请快速输出a[i]=i的数。
解题思路
对于本题,最简单的办法就是对数组进行顺序遍历,判断遍历到的数是否满足条件,这种方法的效率显然是最低的。
下面介绍另外一种方法,主要思路如下:
如果a[i]>i,则接下来的a[i]-i-1个数一定不可能满足a[i]=i,此时可以直接遍历下标为i+(arr[i]-i)的元素,从而减少了遍历的次数,实现代码如下:
import java.util.ArrayList;
public class Test10 {
public static ArrayList<Integer> find(int[] arr) {
ArrayList<Integer> result = new ArrayList<Integer>();
for (int i = 0, j = arr.length - 1; i <= j;) {
if (arr[i] == i) {
result.add(i++);
} else if (arr[i] > i) {
i = i + (arr[i] - i);
} else {
i++;
}
}
return result;
}
}