[leetcode][单调性] Next Permutation
2015-08-25 15:55
232 查看
题目:
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3→
1,3,2
3,2,1→
1,2,3
1,1,5→
1,5,1
class Solution { public: void nextPermutation(vector<int>& nums) { if (nums.size() <= 1) return; int n = nums.size(); int i = n - 2; while (i >= 0 && nums[i] >= nums[i + 1]){//以最后一个字符为结束的最长递减序列 --i; } if (i < 0){//非递增序列,最大Permutation,逆序为最小Permutation reverse(nums.begin(), nums.end()); return; } //在nums[i+1]到nums[n-1]中大于nums[i]的最小值 int j = n - 1; while(j > i && nums[j] <= nums[i]){ --j; } swap(nums[j], nums[i]); sort(nums.begin() + i+1, nums.end());//将逆序序列正序 } };
相关文章推荐
- 在js中创建自己定义的对象和变量还有方法
- SYBASE锁类型与常用命令
- cJSON库使用教程
- 排序算法总结
- OpenCV——旋转模糊 (二)
- PHP程序的执行流程
- 【linux】ubuntu 下tomcat安装
- iOS之旅--隐藏(去除)导航栏底部横线
- POJ 2524 Ubiquitous Religions 并查集
- Android 触摸手势基础 官方文档概览
- arm-linux-gcc的下载与安装配置
- js中数组(Array)的排序(sort)注意事项
- Generating SSH keys(远程登或下载免密码)
- ubuntu下面的某些软件安装
- repeater嵌套绑定(GroupBy)
- DropDownListView下拉刷新和上拉加载和没有更多
- Repairing or Restoring an Inconsistent OCR in RAC
- 使用C语言判断英文字符大小写的方法
- java MD5 加密(16位/32位)
- 在ubuntu上搭建tomcat