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

99.下一个排列

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 的下一个排列。

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

示例 1:

输入:nums = [1,2,3]
输出:[1,3,2]

解题思路

要找到下一个排列,核心思路是遵循 “找升序对→找替换值→反转” 的三步法:
  1. 从后向前找第一个升序对:找到第一个 i 使得 nums[i] < nums[i+1],这个位置是我们需要替换的起点。
  2. 从后向前找第一个更大值:找到第一个 j 使得 nums[j] > nums[i],交换 nums[i]nums[j],保证替换后数值变大且是最小的变大方式。
  3. 反转后续元素:将 i+1 到数组末尾的元素反转,因为这部分原本是降序的,反转后变为升序,能得到最小的更大排列。
  4. 边界情况:如果没找到升序对(数组整体降序),直接反转整个数组得到最小排列
class Solution {int[] nums;public void nextPermutation(int[] nums) {this.nums = nums;int n = nums.length;int i = n-2;while(i>=0 && nums[i] >= nums[i+1]) i--;    // 找升序对
if(i<0){ // 3,2,1 直接反转reverse(i+1);return ;}
int j = n-1;while(i>=0 && nums[i] >= nums[j]) j--; // 找更大值swap(i,j);reverse(i+1); // 反转}public void swap(int i,int j){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}public void reverse(int left){int right = nums.length-1;while(left<right){swap(left,right);left++;right--;}} }

【背思路】

 

http://www.jsqmd.com/news/384127/

相关文章:

  • 基于COMSOL偏微分方程(PDE)的生物堵塞模型构建与研究
  • 为并发而生的 ConcurrentHashMap —— 基于 Java 8 源码深度剖析
  • 2026年管道疏通服务哪家强?郴州地区专业评测与场景化推荐 - 十大品牌推荐
  • 关于air001
  • 别人的成功,可能正好是你的干扰项
  • 如何选择郴州管道疏通服务?2026年推荐与评测解决堵塞与清淤痛点 - 十大品牌推荐
  • 2026年2月北京丰台区养护院推荐,照护标准与安全管理全面解析 - 品牌鉴赏师
  • 涨姿势:为什么 Java 中 “1000==1000” 为 false,而 ”100==100“ 为 true?
  • 浅谈随机化与模拟退火
  • 2026年北京管道疏通推荐:多场景实测评价解决堵塞与异味核心痛点 - 十大品牌推荐
  • 2026年常州管道疏通推荐:基于多场景实测评价,针对管道老化与效率低下难题指南 - 十大品牌推荐
  • 踩坑了,JDK8 中 HashMap 依然会产生死循环问题!
  • 2026年常州管道疏通推荐:多场景管道疏通服务评价,解决堵塞与溢流痛点 - 十大品牌推荐
  • 2026年宝鸡管道疏通推荐:基于多场景实测评价,针对管道老化与效率低下痛点精准指南 - 十大品牌推荐
  • 2026年北海管道疏通推荐:居家应急与市政维护场景深度评测排名 - 十大品牌推荐
  • 深入解析:深信服超融合 HCI 核心技术解析:aSV、aSAN 与 aNET 的协同架构
  • 面试时写不出排序算法?看这篇就够了
  • Netty 结合 Protostuff 传输对象案例:单机压测秒级接收 35 万个对象
  • 2026年北海管道疏通推荐:基于管道修复技术实测的全面评价与推荐 - 十大品牌推荐
  • OpenEuler 20.03构建zabbix8.0 rpm包
  • 交稿前一晚!10个AI论文软件测评:专科生毕业论文写作必备工具推荐
  • 牛!一个比传统数据库快 100-1000 倍的数据库:ClickHouse
  • 杉德斯玛特卡回收攻略:盘点值得信赖的优质线上回收平台 - 团团收购物卡回收
  • 这次终于选对!10个一键生成论文工具测评:本科生毕业论文+开题报告高效写作指南
  • 摆脱论文困扰! 10个降AIGC工具测评:继续教育降AI率必备神器
  • 2026年包头管道疏通推荐:市政与家庭场景全面评测,涵盖清淤修复与快速响应痛点 - 十大品牌推荐
  • Koltin 多线程 - 创建像线程的方式(继承 Thread 类、实现 Runnable 接口、使用匿名内部类、使用 Lambda 表达式、Kotlin 的 thread 函数)
  • P2891 [USACO07OPEN] Dining G
  • 2026年宝鸡管道疏通推荐:基于多场景实测评价,针对效率低下与安全隐忧精准指南 - 十大品牌推荐
  • 人工智能应用- 搜索引擎:02. 搜索引擎发展史