LeetCode 31. 下一个排列(线性扫描)
1. 题目
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-permutation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 类似的题目:
程序员面试金典 - 面试题 05.04. 下一个数(线性扫描)
LeetCode 1053. 交换一次的先前排列
2.1 next_permutation
bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last);
没有下一个更小或者更大的,返回的是false
class Solution {public:void nextPermutation(vector<int>& nums) {next_permutation(nums.begin(),nums.end());}
};
4 ms 6.8 MB
2.2 从后往前找第一个下降点
- 找到下降点 i
- 向后找比 i 点大的最小的数,进行交换
- 最后把 i 后面的数字升序排列(反转即可)
class Solution {public:void nextPermutation(vector<int>& nums) {if(nums.size() <= 1)return;int i = nums.size()-2, j, n = nums.size();while(i >= 0 && nums[i] >= nums[i+1])i--;//找下降点if(i>=0){j = i+1;while(j < n && nums[i] < nums[j])j++;//找比 i 点大的,最小点swap(nums[i], nums[j-1]); }reverse(nums,i+1,n-1);//反转 i+1, end}inline void reverse(vector<int>& a, int l, int r){while(l < r)swap(a[l++],a[r--]);}
};
0 ms 6.9 MB
LeetCode 31. 下一个排列(线性扫描)相关推荐
- Java实现 LeetCode 31下一个排列
31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...
- leetcode —— 31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...
- LeetCode 31. 下一个排列 Next Permutation
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...
- Leetcode 31. 下一个排列 (每日一题 20210831)
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数).如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列).必须 原地 ...
- LeetCode.31 下一个排列
题目描述 实现获取下一个排列的算法,算法需要将给定的数组,重新排列成下一个更大的排列(即组合出下一个更大的数字). 如果不存在下一个更大的排列,则将数字重新排列成最小的排列. 题目思路 我们可以使用如 ...
- leetcode 31.下一个排列
题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空 ...
- LeetCode 31 下一个排列
https://leetcode-cn.com/problems/next-permutation/ 解决方案 class Solution {public void nextPermutation( ...
- 【LeetCode】【HOT】31. 下一个排列
[LeetCode][HOT]31. 下一个排列 文章目录 [LeetCode][HOT]31. 下一个排列 package hot;import java.util.Arrays;public cl ...
- LeetCode每日一题--31. 下一个排列(数学)
题目:跳转至 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原 ...
最新文章
- 不再使用快捷方式打开电脑软件!如何Windows+r 来打开一个你想要打开的软件软件?
- 怎么用IDEA快速查看类图关系?
- 本周进步要点20161009
- Divide it!
- Kafka分区分配策略(3)——自定义分区分配策略
- java ee编译器_Java EE 8 MVC:控制器的详细介绍
- 干货:不同场景容器内获取客户端源IP的方法
- 关于树的父子节点的图形化展示
- 结构数组-创建结构数组---获取修改结构数组数据-------操作字段
- 《怪物猎人:世界》鼠标侧键点击无效的解决方法(罗技g402)
- python寻找完全平方数_279 完全平方数(bfs)
- 聚类算法评价指标python实现_聚类算法及其评估指标
- 即时聊天系统(IM)发送文件语音视频的两种方式比较
- 基于Matlab的Poisson分布,基于matlab的泊松分布的仿真.doc
- matlab示波器多个接口,simulink在一个图形中画出多个示波器曲线的方法
- python批量合并excel文件,后缀名为xls
- C#导入导出数据到Excel的通用类源码
- kfc小程序_利用实验室成长的“未来之肉”将肯德基转换为3D打印鸡肉
- Apache Druid远程代码执行漏洞(CVE-2021-25646)
- Redis教程之基础-五种数据基本操作