下一个字典序列(next permutation)
来源:互联网 发布:mastercam线割编程 编辑:程序博客网 时间:2024/05/21 10:51
//c版本
void reverseArray(int a[],int n){
int mid = n/2-1;
for(int i = 0;i<=mid;i++){
int temp = a[i];
a[i] = a[n-1-i];
a[n-1-i] = temp;
}
}
void nextPermutation2(int a[],int n){
int i = n-2;
while(a[i]>a[i+1]&&i >= 0)
i--;
if(i == -1){
reverseArray(a,n);
return;
}
int j = n-1;
for(;j>i;j--)
if(a[j] > a[i])
break;
int temp = a[i];
a[i] = a[j];
a[j] = temp;
reverseArray(a+i+1,n-i-1);
}
//c++版本
void nextPermutation(vector<int>& sequence){
auto rfirst = reverse_iterator<vector<int>::iterator>(sequence.end());
auto rend = reverse_iterator<vector<int>::iterator>(sequence.begin());
auto povite = next(rfirst);
while((*povite> *prev(povite)) && (povite != rend))
povite = next(povite);
if(povite == rend){
reverse(rfirst,rend);
return ;
}
auto change = find_if(rfirst,rend,bind1st(less<int>(),*povite));
swap(*povite,*change);
reverse(rfirst,povite);
return ;
}
- auto变量为自动变量,在c语言中其实大多普通声明方式声明的变量都是auto变量,他们不需要明确指定auto关键字,默认就是auto的了。auto变量在离开作用域是会变程序自动释放,不会发生内存溢出情况(除了包含指针的类)。使用auto变量的优势是不需要考虑去变量是否被释放,比较安全。c++对其做了扩充,除了具有原有的含义外,还增加了一种类似其他高级语言的型别推导特性。使用auto来代替变量的类型,前提是被明确类型的初始化变量初始化的,可以使用auto关键字,比如int i=10; auto a = i; //这样a也是int类型了,这在使用一些模板类的时候,对于减少冗赘的代码也很有用。
- reverse_iterator函数,用来对iterator进行反转,将end变为begin,begin变为end
- find_if函数,此函数的第一二个参数是迭代器的开始和结束,用来表示一串对象的开始和结束,第三个参数是个条件,当找到满足此条件的对象时就返回对象的迭代器(iterator)。
- bind1st函数,有两个参数(const Operation& op, const T& x)。 bind1st(const Operation& op, const T& x)就是这么一个操作:x op value,对于例子中来说就是*povite 小于 当前迭代器对应的数,所有例子中的find_if功能为找到第一个对象,使得此对象大于*povite,并返回这个对象的迭代器。
- less是一个仿函数,用来表示小于,他有两个参数,如果第一个参数小于第二个参数则返回true,否则返回false。
- 下一个字典序列(next permutation)
- Next Permutation -- LeetCode(下一个字典序)
- LeetCode Next Permutation 生成下一个序列
- Next Permutation下一个全排列序列
- 每日算法之二十七:Next Permutation(下一个字典序)
- 求字典序的下一个排列(对应lc的Next Permutation)
- LeetCode | Next Permutation(下一个排列)
- LeetCode 31 Next Permutation(下一个排列)
- LeetCode 31. Next Permutation(下一个排列)
- LeetCode 31 Next Permutation (下一个排列)
- 31. Next Permutation (下一个排列)
- 下一个排列(Next Permutation)
- Next Permutation 下一个排列
- Next Permutation 下一个排列
- Next Permutation(寻找字典序比输入大1的序列)
- 31.Next Permutation 下一个排列
- Next Permutation-leetcode下一个排列组合
- leetcode:Next Permutation (求下一个排列) 【面试算法题】
- RMI 问题
- linux的五种进程
- JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...
- JavaScript中对象属性的添加和删除
- 计算汉明权重的好方法~
- 下一个字典序列(next permutation)
- java ToolTipText() 设置换行 字体 和 显示时间
- poj3661,dp
- Android使用HttpClient下载图片
- 构造函数模式自定义js对象
- 方法二连接方式复习20140510
- 仓央嘉措灵魂驻足的地方——香巴林卡
- Java 增强型的for循环 for each
- 香巴林卡,你是不曾触及的温柔