排列序号

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

首先来说明一下什么是字典排序,比如说排列序号对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列 12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是 54321.

接下来我们具体举一个例子来说明一下这道题的含义,以[4,6,2,7,3,8,1]为例

首先得到第一个待排序的元素,4。在这个排列中有2、3、1这三个元素比它小,确定了第一个元素后对后面的六个元素进行全排列,即6!中情况,找到第二个元素6,比它小的有4,2,3,1这四个元素,但是在6之前的元素已经确定所以将4排除,则共有三个,以此类推。

4 ——》 3*(6!)

6 ——》3*(5!)

2 ——》1*(4!)

7 ——》2*(3!)

3 ——》1*(2!)

8 ——》0*(1!)

1 ——》0*(0!)

代码如下:

long long permutationIndex(vector<int> &A) (从后往前算)

{
       if(A.empty())
       {
           return 0;
       }
       if(A.size() == 1)
       {
           return 1;
       }
       long long sum = 0;
       long long face = 1;
       for(int i = A.size()-1;i>=0;i--)
       {
           int rank = 0;
           for(int j = i+1;j<A.size();j++)
           {
               if(A[i] > A[j])
               {
                   rank++;//计算后面比A[I]小的元素有几个
               }
           }
           sum = sum + rank*face;
           face = face*(A.size()-i);
       }
       return sum+1;

}

 

转载于:https://www.cnblogs.com/97-5-1/p/8595830.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值