下一个较大排列组合
来源:互联网 发布:dns的默认端口 编辑:程序博客网 时间:2024/04/30 15:47
描述:给定一个无序数组,找到下一个按照该数组元素构成的较大的排列组合。若该数组已经是最大排列情况,则返回最小排列组合。
输入:Array={3,1,2};
输出:Array={3,2,1}。
分析;该问题即要求对区间元素进行一次排列组合,使得新的字典序大于原来的排列。如对{3,6,2,9,8}进行排列。从尾部开始先找到前面小于后面的相邻的2和9。再从尾部找起,找出第一个大于2的数字8,于是交换2和8,这样得到{3,6,8,9,2},然后反向8以后的区间元素{9,2},可得到更小的{3,6,8,2,9}。
Example: 3 6 2 9 8
Step1: 3 6 2 9 8 从尾部查找第一个小于后一位的元素:2
Step2: 3 6 2 9 8 从尾部查找第一个大于2的元素:8
Step3: 3 6 8 9 2 交换元素2和元素8
Step4: 3 6 8 2 9 反向元素8后的区间元素
class Solution{public:bool next_permutation(int &A[],int n){if(n<2) return false;int i=n-2;while(A[i]>A[i+1]&&i>=0){i--;}if(i!=0){int j=n-1;while(A[j]<A[i]){j--;}reverse(A,A+j,A+n);return true;}else{reverse(A,A,A+n);return false;}}private:void reverse(int &A[],int *first,int *last){while(true)if(*first==*last||*first==*(--last))return;else{int tmp=*last;*last=*first;*first++=tmp;}}};
0 0
- 下一个较大排列组合
- 下一个较大元素
- 下一个较大元素II
- 下一个较大元素
- 下一个较大值
- 下一个较大元素
- 下一个较大元素
- 下一个较大元素
- Next Permutation-leetcode下一个排列组合
- 寻找下一个较大元素 --- 利用栈
- Necklace 二分图加上排列组合(求下一个排列组合序列)
- 找出较大的下一个数字组合 Next Permutation
- [程序员面试金典]1002.下一个较大元素
- 下一个较大值 栈和队列(优化防止TLE)
- 栈 之 寻找下一个较大元素 next greater element
- 程序员面试金典——下一个较大元素
- leetcode-31 Next Permutation 数字排列组合找到下一个更大值
- 求下一个排列组合和前一个排列组合(next_permutation和pre_permutation)
- 141.Valid Perfect Square
- 引入 import sun.net.ftp.FtpClient; 报错
- sdut 3404 数据结构实验之排序七:选课名单
- 为什么构造函数不能是虚函数
- 与你相遇,好幸运
- 下一个较大排列组合
- swift基础
- 4-6 带头结点的链式表操作集
- 关于Android Studio中放置assets文件夹
- 自定义进度圆环
- Makefile经典教程
- C++多态原理和虚函数的知识后记录
- jquery
- 数据类型