问题: 给定一个整型数组,找出最大下标距离j-i, 当且仅当A[i]<A[j]和i<j。
思路: 记录从第一个元素开始的下降序列,因为A[i]一定会出现在其中,然后从尾部开始扫描,i从下降序列开始扫描,j从数组尾部开始扫描,记录符合条件A[i]<A[j]的距离最大值。
java代码:
int maxIndexDistance(int A[]){
if(A==null||A.length<2)
return 0;
boolean DescSeq[]=new boolean[A.length];
int min=A[0],n=A.length;
DescSeq[0]=true;
for(int i=1;i<n;i++){
if(A[i]<min){
//下降序列标记
DescSeq[i]=true;
min=A[i];
}
}
int maxDist=0,i=n-1,j=n-1;
while(i>=0){
if(DescSeq[i]==false){
i--;
continue;
}
while((A[j]<=A[i])&&(j>i))
j--;
if((j-i)>maxDist){
maxDist=j-i;
}
i--;
}
return maxDist;
}