论述题 6.  定义有数组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 Test
   {
   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++);
   //当arr[i]>i时,则接下来的a[i]-i-1个数肯定不满足a[i]=i
   else if(m[i]>i)
   i=i+(arr[i]-i);
   //遍历下一个数
   else
   i++;
   }
   return result;
   }
【答案解析】