prev_permutation_cycle与next_permutation_cycle
来源:互联网 发布:cstr在vb中什么意思 编辑:程序博客网 时间:2024/06/03 04:18
下一个排列与上一个排列的实现:
例如:1234的下一个排列为1243,在下一个排列为1324因此可以设置两个相邻的指针i,ii,指针从后往前搜索,直到*i <*ii,
这里为i->3; jj->4;然后设置指针j从最后往前搜索,找到第一个大于i的,即*i<*j;这里j->4;交换i与j的元素,然后将ii到最后逆序。
上一个排列的思路为 *i>*ii , *i > *j ,交换i与j,ii后逆序
void next_permutation_cycle(int* arr, int n){ if (n < 2){ return; } int right = n - 2, left = n - 1;//right与left写反了。。。。。。 while (1){ if (arr[right] < arr[left]){ int big_right = n - 1; while (!(arr[big_right] > arr[right])){ --big_right; } swap(arr[big_right], arr[right]); reverse(&arr[left], &arr[n]); break; } if (right == 0){ reverse(&arr[0], &arr[n]); break;} --right; --left; }}void prev_permutation_cycle(int* arr, int n){ if (n < 2){ return; } int left = n - 2; int right = n - 1; while (1){ if (arr[left] > arr[right]){ int j = n - 1; while (!(arr[left]>arr[j])){ --j; } swap(arr[left], arr[j]); reverse(&arr[right], &arr[n]); break; } if (left == 0){ reverse(&arr[0], &arr[n]); break; } --left; --right; }}
阅读全文
0 0
- prev_permutation_cycle与next_permutation_cycle
- 与
- 与
- “” 与 “”
- ##与#
- >> 与 > >
- :与::
- &与&&
- && 与 &
- [[与((
- >>与>>>
- *与++
- *与++
- ++与++
- ->与 .
- :与::
- & | 与&& ||
- &&与&
- C. Sereja and Brackets----线段树
- 2017App Store 最新完整版审核指南
- 1_Buck_PI
- Java解析XML文件——DOM解析
- 百度2017秋招笔试真题(一)
- prev_permutation_cycle与next_permutation_cycle
- 2_Boost_Open_Loop
- jsday10(校验表单 正则dhtml中特有的正则规则 onblur onsubmit)(跟随广告)
- Unity入门学习 //04_Hierarchy窗口、Project窗口
- 基于Mathematica的机器人仿真环境(SLAM篇)
- AQS源码分析
- Java中的static
- YP. 2. Exercises
- 3_Buck_Boost