码迷,mamicode.com
首页 > 其他好文 > 详细

lintcode-medium-Permutation Index II

时间:2016-04-04 14:31:54      阅读:118      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!