当前位置:网站首页>下一个排列
下一个排列
2022-08-02 07:49:00 【ZEKEGU1997】
问题描述
整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。
例如,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 的下一个排列。
解法

步骤:
- 从最后一个开始向前寻找到第一个降序的元素i,若未找到说明已经是最大的排列
- 从最后一个开始向前寻找到第一个比i大的元素j、
- 交换元素ij
- 将i+1至末尾之间的元素逆置
public class Solution {
public void NextPermutation(int[] nums) {
if(nums.Length==1)
return;
int i=nums.Length-2;
while(i>=0&&nums[i]>=nums[i+1])
i--;
if(i<0)
{
Array.Sort(nums);
return;
}
int j=nums.Length-1;
while(j>i&&nums[j]<=nums[i])
j--;
int t=nums[i];
nums[i]=nums[j];
nums[j]=t;
int a=i+1,b=nums.Length-1;
while(a<b)
{
t=nums[a];
nums[a]=nums[b];
nums[b]=t;
a++;b--;
}
return;
}
}边栏推荐
猜你喜欢

UG NX二次开发(C#)-外部模式-导出dwg格式的文件

牛客2022 暑期多校4 D Jobs (Easy Version)(递推优化策略)

停止精神内耗 每日分享

Biotin hydrazide HCl|CAS:66640-86-6|生物素-酰肼盐酸盐

Xilinx Constraint Study Notes - Timing Constraints

有点奇怪!访问目的网址,主机能容器却不行

商业智能平台BI 商业智能分析平台 如何选择合适的商业智能平台BI

52.【bool类型输入任何非0数值不为1的版本原因】

HCIP 第十三天

Stop mental exhaustion Daily sharing
随机推荐
mysql启动报错The server quit without updating PID file几种解决办法
Application and case analysis of CASA model and CENTURY model
18、优化网站性能
爬虫 视频爬取工具you-get
@RequestBody使用
Fatal error compiling: 无效的目标发行版: 11
3D激光slam:LeGO-LOAM---地面点提取方法及代码分析
Kind of weird!Access the destination URL, the host can container but not
HCIP第三天
HCIP 第十三天
WebForm DropDownList bind year and month respectively
用户身份标识与账号体系实践
原型模式
小说里的编程 【连载之二十一】元宇宙里月亮弯弯
prometheus monitoring mysql_galera cluster
mysql如何从某一行检索到最后
@FeignClient configuration参数配置
BGP solves routing black hole through MPLS
Transimpedance amplifier
sql创建表格 如图 运行完提示invalid table name 是什么原因