首页 > 其他 > 详细

lintcode-medium-Permutation Index II

时间:2016-04-04 14:30:34      阅读:320      评论:0      收藏:0      [点我收藏+]

Given a permutation which may contain repeated numbers, find its index in all the permutations of these numbers, which are ordered in lexicographical order. The index begins at 1.

 

Example

Given the permutation [1, 4, 2, 2], return 3.

 

public class Solution {
    /**
     * @param A an integer array
     * @return a long integer
     */
    public long permutationIndexII(int[] A) {
        // Write your code here
        
        if(A == null || A.length == 0)
            return 1;
        
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        
        for(int i = 0; i < A.length; i++){
            if(map.containsKey(A[i]))
                map.put(A[i], map.get(A[i]) + 1);
            else
                map.put(A[i], 1);
        }
        
        long result = 1;
        
        for(int i = 0; i < A.length; i++){
            HashSet<Integer> set = new HashSet<Integer>();
            
            for(int j = i + 1; j < A.length; j++){
                if(A[j] < A[i] && !set.contains(A[j])){
                    set.add(A[j]);
                    
                    map.put(A[j], map.get(A[j]) - 1);
                    result += getNum(map);
                    map.put(A[j], map.get(A[j]) + 1);
                }
            }
            
            map.put(A[i], map.get(A[i]) - 1);
        }
        
        return result;
    }
    
    public long factor(int n){
        long result = 1;
        
        for(int i = 1; i <= n; i++)
            result = result * i;
        
        return result;
    }
    
    public long getNum(HashMap<Integer, Integer> map){
        long den = 1;
        int count = 0;
        
        for(Integer temp: map.values()){
            if(temp != 0){
                count += temp;
                den *= factor(temp);
            }
        }
        
        return factor(count) / den;
    }
    
}

 

lintcode-medium-Permutation Index II

原文:http://www.cnblogs.com/goblinengineer/p/5351817.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!