5.8
这个算法是我从网上找到的,我自己没有想出来。刚开始还以为是逆序对数,后来仔细一想也不是的。
算法的主要思想是,算出每一位的权重,每一位的权重也就是 --在这个数之后还有几个数小于它。
然后最后的结果为 每一位的权重*所处位置的阶乘。
比如 3241 权重依次为 (2,1,1,0) 那最后的结果就是 2*3!+1*2!+1*1!+0;
这个算法应该记下来,至于为什么这么算,呵呵,我也是想不明白的,记住了就好了。
public class Solution {
/**
* @param A an integer array
* @return a long integer
*/
public long permutationIndex(int[] A) {
// Write your code here、
int length = A.length;
if(length <= 1){
return length;
}
int[] flag = new int[length];
long count = 0;
for(int i = 0;i<length-1;i++){
for(int j = i;j < length; j++){
if(A[i] > A[j]){
flag[i]++;
}
}
count = (flag[i] + count)*(length - i -1);
}
return count +1;
}
}