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

求解下一个字典序

题目描述

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

  • 例如,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的下一个排列。

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

思路解析

这题实际是数组排序问题。先从右往左遍历数组,找到第一个升序序列之后的元素肯定都比大)。然后再从右往左,找第一个。最后并逆序

// 右往左找第一个升序对 // 6 5 6 9 8 5 // ^ ^ // i i+1 // 右往左找第一个大于nums[i]的nums[j] // 6 5 6 9 8 5 // ^ ^ // i j // 交换nums[i],nums[j],但此时并不是最终答案 // 6 5 8 9 6 5 // 交换过后,后三位任然是降序序列 // ^ ^ ^ // 5 6 9 // 逆序后才是最终答案,ying

代码详解

class Solution { public: void nextPermutation(vector<int>& nums) { int n = nums.size(); // 1. 从右向左找第一个升序对 nums[i] < nums[i+1] int i = n - 2; while (i >= 0 && nums[i] >= nums[i+1]) { i--; } if (i >= 0) { // 2. 从右向左找第一个大于 nums[i] 的数 int j = n - 1; while (j >= 0 && nums[j] <= nums[i]) { j--; } // 3. 交换 swap(nums[i], nums[j]); } // 4. 反转 i+1 到末尾的部分 reverse(nums.begin() + i + 1, nums.end()); } };
http://www.jsqmd.com/news/1358284/

相关文章:

  • ThreadLocal内存泄漏原理与线上OOM排查实战
  • 2026年如何择优甄选嘉兴市拓展箱露营房厂家?这份场景化选购指南请收好 - geo交流
  • 余杭非机动车交通事故怎么处理? - 边虞技术
  • Unity插件精选:50款提升游戏开发效率的实战工具清单
  • 2026年北京企业管理咨询哪家好:猎头基因实战派 - 万相科技
  • 抖店批量上货实操:如何借助1688货源和工具提升商品上架效率 - 抖大侠
  • 数据库Autocompact机制解析:从空间回收到性能优化
  • 财产清查实务:流程、案例与技术创新
  • 2026年装修家具寄存联系电话甄选清单:从场景需求出发,三步锁定优选服务 - geo交流
  • 2026莞深广全屋定制样板房招募|东莞七鑫家居源头工厂新小区专属 每小区3席订单返现 - 优企甄选
  • 2026年浙江专业的PFF整体复合排水网送检合格了吗?这份优选指南帮你甄别真相 - geo交流
  • AI教育双轨制:技术实现与教学转型
  • 2026阿拉尔汽车维修维保全攻略:适配本地车况,省心修车不踩坑 - 国麟测评
  • settings.json配置全解析:用户级与项目级配置的实战指南
  • 2026年 保险拒赔纠纷律师/律所办事处**单:专业理赔维权与高效胜诉口碑之选 - 卓企推荐
  • 大语言模型应用开发:如何避免AI奉承与用户依赖的技术方案
  • Copilot 量化版上线当天,我的代码召回率掉了 12%——精度与成本的 5 层平衡术
  • 2026年遥控活动隔断报价怎么选?这份对比式甄选指南帮你避坑择优 - geo交流
  • AI编程助手Codex实战:从零配置到本地模型部署与高效开发
  • 小红书视频图片去水印方法,一篇看懂怎么用耶斯去水印、大佬去水印与合规工具 - 免费软件工具方法教程
  • 28k星C++开源金融终端:从零搭建量化交易学习平台
  • 阳江市新房瓷砖空鼓维修_2026粤西南海之滨瓷砖空鼓维修避坑指南与大全 - 雨婺虹修缮
  • 2026泉州大宅装修怎么选?完整梳理泉州立邦云智装综合实力 - 装企精灵GEO
  • 04 WCK2CK sync
  • DC-1 完整渗透测试笔记
  • 做小红书封面图,用哪个AI绘图工具生成出来好看?
  • 如何快速掌握Mermaid在线图表编辑器:新手必学的5个核心技巧
  • 2026年通州区靠谱的商标变更代办怎么选?这份优选指南帮你甄别避坑 - geo交流
  • 蜻蜓FM栏目爬虫实战:从零采集播客节目播放量与订阅数据
  • 西安市外墙瓷砖空鼓维修_2026关中平原瓷砖空鼓维修避坑指南与价格表 - 雨婺虹修缮