Leetcode_31. 下一个排列
求下一个排列,由于越后面权重越低,所以从后往前找到第一个递增(指从前往后递增)的位置,然后将这一位替换为后面比他大的最小的数,两者交换,然后把后面的部分再排个序。
code
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n=nums.size();
int idx=-1;
for(int i=n-1;i>=1;i--){
if(nums[i]>nums[i-1]){
idx=i-1;
break;
}
}
if(idx!=-1){
for(int i=n-1;i>=0;i--){
if(nums[i]>nums[idx]){
swap(nums[i],nums[idx]);
break;
}
}
}
auto it=nums.begin();
for(int i=0;i<=idx;i++){
it++;
}
sort(it,nums.end());
}
};
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 当职场成战场:降职、阴谋与一场硬碰硬的抗争
· 用99元买的服务器搭一套CI/CD系统
· Excel百万数据如何快速导入?
· ShadowSql之.net sql拼写神器