zoukankan      html  css  js  c++  java
  • 4.排列序号

     题目:给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。

    class Solution {
    public:
        /**
         * @param A an integer array
         * @return a long integer
         */
        long long permutationIndex(vector<int>& A) {
            // Write your code here
             // 找出A中每一个位置其后有多少个数比它小
            // 然后再相加这些数与位对应的权
            int len = A.size();
            int c[len];
            c[len - 1] = 0;   // 最后一个数之后就没有比它小的数了
            vector<int> a;
            a.push_back(A[len - 1]);
            for (int i = len - 2; i >= 0; --i) {
                auto iter = lower_bound(a.begin(), a.end(), A[i]);
                c[i] = iter - a.begin();
                a.insert(iter, A[i]);
            }
            long long ans = 1, fac = 1, cc = 1;
            for (int i = len - 2; i >= 0; --i)
                ans += (fac*=cc++) * c[i];
            return ans;
        }
    };

  • 相关阅读:
    Fiddler-代理-过滤-弱网测试
    POJ2186 Popular Cows
    POJ3264 Balanced Lineup
    多模式串字符串匹配模板题
    Intersecting Lines
    实现堆结构
    OpenJuege 兔子与星空
    拓扑排序
    POJ3635 Full Tank?
    OpenJudge Cartesian Tree
  • 原文地址:https://www.cnblogs.com/ALIMAI2002/p/7206838.html
Copyright © 2011-2022 走看看