leetcode之路031 Next Permutation
来源:互联网 发布:高中毕业旅行知乎 编辑:程序博客网 时间:2024/04/29 02:56
题目大意:实现下一个排列,将一些数字按照字典序大小,找到字典序在它后面一个的数字组合。
假如此数字排列为最大,则返回最小的字典序。交换必须就地实现,即在原空间完成,不能分配额外的内存空间。
例:1,2,3返回1,3,2;3,2,1返回1,2,3。
思路:
前面看STL源码剖析时,看过此算法的实现原理。因此直接实现即可。
对于一个排列,要找下一个排列,,设排列用一个数组a表示,分为以下几步:
1、从尾端向前寻找两个相邻元素,分别设为i,i+1,使得满足a[i]<a[i+1]。
2、从尾端寻找另一个元素j,使得a[i]<a[j],此时将a[i]和a[j]交换。
3、将a[i+1]和a[i+1]之后的所有元素逆序,此时结果即为所求。
例:1,2,3,6,5,4,此时第一步得到i=2,第二步得到j=5,交换得到1,2,4,6,5,3;第三步,将i+1=3和它之后的元素逆序,即6,5,3,得到3,5,6。
下面是ac的代码,运行时间12ms:
class Solution {public: void nextPermutation(vector<int>& nums) { if(nums.size()==0)return;int i=nums.size()-1;while(i-1>=0&&nums[i]<=nums[i-1])--i;--i;if(i==-1){reverse(nums.begin(),nums.end());return;}int j=nums.size()-1;while(nums[j]<=nums[i])--j;swap(nums[i],nums[j]);reverse(nums.begin()+i+1,nums.end()); }};
0 0
- leetcode之路031 Next Permutation
- LeetCode之Next Permutation
- leetcode之Next Permutation
- LeetCode之Next Permutation
- 【Leetcode】之Next Permutation
- LeetCode进阶之路(Next Permutation)
- LeetCode 031 Next Permutation
- leetcode 031 Next Permutation
- LeetCode 031 Next Permutation
- [LeetCode]031-Next Permutation
- LeetCode 031 Next Permutation
- leetcode 031 Next Permutation
- leetcode 031 Next Permutation
- LeetCode 031 Next Permutation
- leetcode之八Next Permutation
- Leetcode之Next Permutation (Medium)
- 数组之Next Permutation---leetcode
- Leetcode之Next Permutation 问题
- AdapterViewFlipper组件学习笔记
- HDU 1166 敌兵布阵
- 订阅电视,有希望活下来吗?
- HDU 1081 To The Max(二维最大字段和,转化为一维)
- 写在8月初
- leetcode之路031 Next Permutation
- 动态库和头文件的搜索顺序
- Java基础-面向对象
- JavaScript (定时器控件实现图片的 滚动 以及JavaScript实现跳转和关闭窗口)
- Javascript检测浏览器useAgent
- 借助apache来实现下载后台程序导出的excel文件
- 11111111111111111
- cocos2dx pageview 设置滑动灵敏度
- android-shape设置圆角方法