当前位置: 首页 > news >正文

214、【数组】下一个排列(Python)

题目描述

在这里插入图片描述
在这里插入图片描述
原题链接:31. 下一个排列

思路

从后往前,找到第一个小于右侧集合的数,从右侧集合中找到一个比该数大的最小的数替换上去。
然后,将右侧集合从小到排列,就为当前排列中,下一个排列的数。

代码实现

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n = len(nums)        
        # 1、从倒数第二个数从右向左遍历
        i = n - 2
        # 找到第一个小于右侧集合的数
        while i >=0 and nums[i] >= nums[i + 1]:		# 此时右侧集合一定为单调递减
            i -= 1
        # 当该排列不是全为单调递减时
        if i >= 0:
        	# 找到右侧集合中,比nums[i]的大最小的数
            j = n - 1
            while nums[j] <= nums[i]:
                j -= 1
            # 将该数放置到这个位置上,此时就找到了下一个排列中该位置上应有的数
            nums[i], nums[j] = nums[j], nums[i]
        
        # 因为右侧集合为单调递减,因此进行左右交换后一定会为单调递增
        l, r = i + 1, n - 1
        while l < r:
            nums[l], nums[r] = nums[r], nums[l]
            l += 1
            r -= 1
        

        

参考文章:带你发明下一个排列算法(Python/Java/C++/C/Go/JS/Rust)

相关文章:

  • 目标追踪数据标注
  • WITRAN_2DPSGMU_Encoder 类
  • Lombok库
  • 电子电器架构 --- 智能座舱的定义
  • [Linux]umask及其设置
  • 【prometheus+Grafana篇】Prometheus与Grafana:深入了解监控架构与数据可视化分析平台
  • 深度学习总结(12)
  • 10.第二阶段x64游戏实战-添加计时器
  • Mysql概述
  • MCP 认证考试常见技术难题实战分析与解决方案
  • Python(14)Python内置函数完全指南:从基础使用到高阶技巧
  • 爱普生EV7050EAN在ONT交换机的应用
  • GPT-SoVITS:5 步实现 AI 语音克隆
  • 测试用例如何编写
  • 破产计划:ESP32s3+UVC+ov2640实现免驱摄像头
  • CExercise_12_单链表面试题_3合并两条有序的单向链表,使得合并后的链表也是有序的 (要求: 不能额 外申请堆内存空间)
  • 数字人:开启医疗领域的智慧变革新时代(5/10)
  • 计算机三级第一章:信息安全保障概述(以时间节点推进的总结)
  • 【Linux】进程概念(一):冯诺依曼体系结构 + 操作系统
  • ElementNotInteractableException原因及解决办法
  • 金正恩出席朝鲜人民军海军驱逐舰入水仪式
  • 上海嘉定远香文化环启用,运动、看展、听歌“一站式解决”
  • 商务部:汽车流通消费改革试点正在加快推进
  • 11-13世纪的地中海贸易
  • 南方医科大学原副校长宁习洲主动投案,接受审查调查
  • 无视规范开“远端”、企业云端被窃密,国安部:莫让运维成运“危”