您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

算法图解:下个排列(next permutation)

时间:2022-04-20 14:19:47  来源:  作者:学海云舟

给定一个单词或整数数组,按字典顺序排列找到下一个排列

例如,“gfg”的下一个排列是“ggf”,[1, 2, 3] 的下一个排列是 [1, 3, 2]。

第一步:从后往前找到第一个破坏单调递增性质的位置(i, i+1)

第二步:在 i 后面找到位置最靠后比 A[i] 大的元素A[j]

第三步:交换 A[i] 和 A[j]

第四步:从 (i+1) 位置开始颠倒序列

算法图解:下个排列(next permutation)

 

def nextPermutation(nums: List[int]) -> None:
    """
    Do not return anything, modify nums in-place instead.
    """
    
    n = len(nums)
    
    # step 1: find the larget i, such that A[i] < A[i+1]
    found = False
    for i in range(n-2, -1, -1):
        if nums[i] < nums[i+1]:
            found = True
            break
    # Notice: if can't find any, we have the largest permutation
    if not found: return nums.reverse()
    
    # step 2: find the largest index j, such that A[i] < A[j]
    for k in range(i+1, n):
        if nums[i] < nums[k]:
            j = k
    
    # step 3: swap i and j
    nums[i], nums[j] = nums[j], nums[i]
    
    # step 4: reverse A[i+1] to the end
    for k in range(i+1, (i+n)//2+1):
        nums[k], nums[n+i-k] = nums[n+i-k], nums[k]
    
    return nums

Follow-up: 怎样找前一个排列呢?



Tags:排列   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
什么是多头排列
均线是最平常的分析指标之一,反映过去一段时间内股票市场的平均成本变化情况。均线和多根均线形成的均线系统常用于判断市场走势,均线在一定条件下能起到支撑和阻力的功用。短...【详细内容】
2023-02-20  Search: 排列  点击:(178)  评论:(0)  加入收藏
为何键盘上的按键,不是按字母顺序ABC排列,找字母不麻烦吗?
不知道你发现没有,无论是键盘还是笔记本电脑,还是智能手机 软键盘,按键上字母的排列顺序都惊人的一致。细心的朋友都会发现,这些字母的排序都是打乱的,并不是按字母表的顺序如AB...【详细内容】
2022-07-10  Search: 排列  点击:(419)  评论:(0)  加入收藏
算法图解:下个排列(next permutation)
给定一个单词或整数数组,按字典顺序排列找到下一个排列例如,“gfg”的下一个排列是“ggf”,[1, 2, 3] 的下一个排列是 [1, 3, 2]。第一步:从后往前找到第一个破坏单调递增性质的...【详细内容】
2022-04-20  Search: 排列  点击:(346)  评论:(0)  加入收藏
三盾平行排列!别克品牌或将“换标”,你觉得新LOGO怎么样
别克在美国专利及商标局(USPTO)注册申请了新样式的品牌LOGO 此为新LOGO平面显示效果(专利图)[懂车帝原创 产品] 通用汽车旗下别克品牌或将迎来LOGO(标志)更新。近日,据海外媒体报道...【详细内容】
2022-03-23  Search: 排列  点击:(519)  评论:(0)  加入收藏
一文看懂全排列算法
C++的<algorithm>头文件中实现了全排列,即next_permutation函数,它是基于字典序实现的,执行一次next_permutation函数就相当于进行了一次“变异”,变异之后字典序会比原来的字符串大,但其位次也仅仅排在变异之前的字符串之...【详细内容】
2020-02-11  Search: 排列  点击:(389)  评论:(0)  加入收藏
军衔的等级排名从小到大 军衔等级肩章排列图片
中国的军队采取的是军衔制度,各级别的管理层都有不同的军衔,在我国,军衔晋升是比较严格的,对于有重大贡献的人才会晋升军衔,越往上是越难的,对于中国的军衔划分等级,很多人都只知道...【详细内容】
2019-11-22  Search: 排列  点击:(2286)  评论:(0)  加入收藏
公文写作中的文章结构顺序排列技巧
在公文语段中,逻辑混乱、条理不清、语意模糊的现象时而可见,究其原因,常常是思路不畅、句序不顺。它不仅打乱了阅文者的线性思维,给阅文者对公文内容的轻松理解带来困难,而且影响...【详细内容】
2019-11-13  Search: 排列  点击:(425)  评论:(0)  加入收藏
PS如何将几个图层排列在同一水平或垂直线上
出于制作的需要,我们经常要将一些图层排列在同一水平或垂直线上,我们将左眼的位置单独往上方移动一些,如下左图。这样两个眼睛就不在同一水平线上了,现在来使用对齐功能。注意如...【详细内容】
2019-07-18  Search: 排列  点击:(2934)  评论:(0)  加入收藏
为什么键盘字母不按字母顺序排列?
当你第一次注册了QQ号,第一次加了网友,正准备打字的时候,突然发现键盘上的字母怎么都是乱的,难道ABCD....这样不行吗?怎么会有这种反人类的操作。所以我们只能在昏暗的灯光下,爬...【详细内容】
2019-06-24  Search: 排列  点击:(1036)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(17)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(54)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(46)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(80)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(91)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(104)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(73)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(113)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(79)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(169)  评论:(0)  加入收藏
站内最新
站内热门
站内头条