zoukankan      html  css  js  c++  java
  • LintCode "Permutation Index II" !

    Simply a variation to "Permutation Index". When calculating current digit index, we consider duplicated case.

    Again, similar as "Digit Counts", it is another counting problem and stil digit by digit.

    And please note: we can use Fenwick Tree to calculate rank by O(nlgn)

    class Solution 
    {
        long long dupPerm(unordered_map<int, int> &hash) 
        {
            if (hash.empty()) return 1;
    
            long long dup = 1;
            for (auto it = hash.begin(); it != hash.end(); ++it) 
            {
            dup *= w(it->second);
            }
    
            return dup;
        }
        long long w(int n) // n*(n-1)*..*2*1
        {
            long long ret = 1;
            while(n > 1)
            {
                ret *= n;
                n --;
            }
            return ret;
        }
    public:
        /**
         * @param A an integer array
         * @return a long integer
         */
        long long permutationIndexII(vector<int>& A) 
        {
            int n = A.size();
            if(!n) return 0;
            
            long long index = 1;
            long long factor= w(n - 1);
            
            //  MSB -> LSB
            for(int i = 0; i < n; i ++)    
            {
                // Calc rank
              int rank = 0;
              for(int j = i + 1; j < n; j ++)
              {            
                if(A[i] > A[j])
                  rank ++;
              }
              
              // Calc dup factor
                unordered_map<int, int> hm;          
                for(int j = i; j < n; j ++)
                    ++hm[A[j]];
          
                index += rank * factor / dupPerm(hm);
                if(i < (n - 1))factor /= n - i - 1;
            }
            
            return index;
        }
    };
  • 相关阅读:
    JS加密库
    异常处理
    uva 10673 Play with Floor and Ceil
    执⾏ Python 程序的三种⽅式----pycharm安装
    第⼀个 Python 程序
    认识 Python
    svg的使用
    elementUI中el-image显示不出来图片?img与el-image的区别
    类型转化与变量
    liunx
  • 原文地址:https://www.cnblogs.com/tonix/p/4934976.html
Copyright © 2011-2022 走看看