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

LeetCode Hot100 31.下一个排列

题目

整数数组的一个 排列  就是将其所有成员以序列或线性顺序排列。

  • 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3][1,3,2][3,1,2][2,3,1] 。

整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。

  • 例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。
  • 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。
  • 而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。

给你一个整数数组 nums ,找出 nums 的下一个排列。

必须 原地 修改,只允许使用额外常数空间。

理解:看成数字,逐渐变大,123  132  213  231  312  321,321的下一个是123

方法

代码

class Solution {public void nextPermutation(int[] nums) {int n = nums.length, k = n - 1;while (k - 1 >= 0 && nums[k - 1] >= nums[k]) k--;if (k == 0) {reverse(nums, 0, n - 1);} else {int u = k;while (u + 1 < n && nums[u + 1] > nums[k - 1]) u++;swap(nums, k - 1, u);reverse(nums, k, n - 1);}}void reverse(int[] nums, int a, int b) {int l = a, r = b;while (l < r) swap(nums, l++, r--);}void swap(int[] nums, int a, int b) {int c = nums[a];nums[a] = nums[b];nums[b] = c;}
}

http://www.lryc.cn/news/250130.html

相关文章:

  • Redis主从与哨兵架构详解
  • Linux:docker的数据管理(6)
  • 深入理解Zookeeper系列-1.初识Zoookeeper
  • 芯片技术探索:了解构芯片的设计与制造之旅
  • STM32 超声波模块(HC-SR04)
  • ELK+Filebeat
  • MySql之锁表、锁行解决方案
  • 2023年第十六届山东省职业院校技能大赛中职组“网络安全”赛项竞赛正式试题
  • JAVA 整合 AWS S3(Amazon Simple Storage Service)文件上传,分片上传,删除,下载
  • 记录:Unity脚本的编写9.0
  • 共享单车停放(简单的struct结构运用)
  • 【Java8系列07】Java8日期处理
  • 为什么做CSGO搬砖的不直接去炒股呢?
  • 12月01日,每日信息差//阿里国际发布3款AI设计生态工具//美团买菜升级为“小象超市”//外国人永居证换新、6国游客免签来华
  • ChatGPT探索:提示工程详解—程序员效率提升必备技能【文末送书】
  • Pytest做性能测试?
  • Swagger各版本访问地址
  • docker-compose;私有镜像仓库harbor搭建;镜像推送到私有仓库harbor
  • OpenTSDB(CVE-202035476)漏洞复现及利用
  • Maven无法拉取依赖/构建失败操作步骤(基本都能解决)
  • 【数据库】数据库并发控制的目标,可串行化序列的分析,并发控制调度器模型
  • 带头结点的双向循环链表
  • 2023年11月下旬大模型新动向集锦
  • 有IP没有域名可以申请证书吗?
  • 【软件推荐】卸载360软件geek;护眼软件flux;
  • Module build failed: Error: ENOENT: no such file or directory
  • Postgresql BatchInsert唯一键冲突及解决
  • 腾讯云AMD服务器标准型SA5实例AMD EPYC Bergamo处理器
  • 力扣 --- 加油站
  • C++基础 -25- 动态多态