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

JAVA练习326- 下一个排列

题目概览

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

  • 例如,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]

示例 2:

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

示例 3:

输入:nums = [1,1,5]输出:[1,5,1]

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

来源:31. 下一个排列 - 力扣(LeetCode)

解题分析

方法:两次遍历

以 [ 1,2,3,6,5,4 ] 为例,他的下一个排列是 [ 1,2,4,3,5,6 ],可以看出一个排列中至少存在一个升序排列,一个降序排列,我们把共同的元素算给降序排列,那么下一个排列就是将 最右侧升序排列中的最大值(令此时索引为 i)与 最右侧的降序排列中的较小值(令此时索引为 j,nums[ j ] 一定要大于 nums[ i ] 且 nums [ j ] 最小)进行交换 ,然后将 i 后面的排列调整为升序(原本已经为降序,反转即可)。

具体实现:

  1. 从右侧开始遍历,找到第一个相邻且满足 nums[ i ] < nums[ j ] 的位置,此时 [ i, j ] 就为右侧第一个升序排列,[ j, n-1 ] 就为右侧第一个降序排列,i 就是升序排列中的最大值。
  2. 从右侧开测遍历,找到第一个满足 num[ i ] < nums[ k ] 的位置,k 就是降序排列中较小值。
  3. 交换 i 和 k,反转 [ i + 1, n-1 ]。

时间复杂度:O(n)
空间复杂度:O(1)

class Solution { public void nextPermutation(int[] nums) { int n = nums.length; if (n == 1) { return; } int i = n - 2, j = n - 1; while(i >= 0 && nums[i] >= nums[j]) { i--; j--; } if (i < 0) { for (int z = 0; z < n / 2; ++z) { swap(nums, z, n - 1 - z); } return; } int k = n - 1; while(nums[i] >= nums[k]) { k--; } swap(nums, i, k); int l = n - 1; for (int z = i + 1; z <= (n + i) / 2; ++z) { swap(nums, z, l--); } } private void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
http://www.jsqmd.com/news/1249382/

相关文章:

  • 2026年怎么选高性价比ai读文字工具:零成本日均省12分钟工作
  • 【模拟IC学习笔记】 PSS和Pnoise仿真
  • 从零开始学前端 | 第四十一章:表单、提交与基础后端交互意识
  • AI 情报局:用 PowerMem + SeekDB 做一个多 Agent 记忆小游戏
  • 苍穹外卖初始工程涉及技术点
  • 气体灭火钢瓶合规管护:2026年消防维保领域的隐形刚需与选型观察 - 优质品牌测评
  • 山地风电长距光缆排查解法 G-4000A 让单人野外巡线落地可行
  • SIM820X-M2 5G HAT OpenWrt软路由器——安装MySQL(二)问题记录
  • 国内可编程直流电源供应商哪家性价比高?深度解析与优选指南 - 品研笔录
  • 别再被谣言误导!麦通MSX带你了解海外市场的6个常见误区
  • 苏州符合行业规范黄金回收商家,大盘回收不扣损耗不压色 - 奢侈品回收评测
  • 如何基于小型工控机与openwrt打造家用软路由
  • 格拉苏蒂手表维修保养与售后指引权威公示(2026年7月最新) - 亨得利官方服务中心
  • 【2024 AI音乐生成工具终极对决】:Stable Audio、Suno、Udio、AIVA、Soundraw五大平台实测数据全曝光(附商用避坑指南)
  • Springboot整合百度人脸识别功能实现注册和登录
  • 2026最新:语音转文字在线生成怎么选?3款免费实用工具亲测好用
  • openwrt软路由利用Zerotier实现内网穿透
  • 不会正确使用粤语录音转纪要APP?2026超详细入门操作步骤请收好 - AI办公提效专家
  • 前端接流三大主流方式
  • 庭院水景园林一站式打造科普|杭州美村美户园林建设全业务多维详解 - 品牌测评网
  • 人工智能导论|仅自己可见 2024/6/24
  • 百达翡丽腕表无锡售后服务中心|本地专属维保热线2026全新公示 - 百达翡丽中国售后中心
  • 终端数据防泄漏两大核心能力:动态信息审计与静态文件识别详解
  • 动态建模技术如何革新智能仓储管理
  • 树莓派玩转openwrt软路由:1.OpenWrt与路由器简介
  • AIGC 产教融合实验室核心配置指南 | 轻硬件・重平台・强落地
  • Django毕业设计-基于 Python 的校园疫情防控数据管理系统设计与实现 高校学生疫情信息报备管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 出差拜访客户攒了好几份录音 2026百度音频转文字免费版够用吗
  • 产线图纸、工艺参数频频外泄?机械制造企业的数据安全困局与破局之道
  • 2024软路由介绍及新手入门(一) #软路由 #openwrt