[LeetCode] 31. Next Permutation
2016-07-19 20:58
211 查看
思路:
一个比较标准的算法, 直接看注释吧, 分为五步
一个比较标准的算法, 直接看注释吧, 分为五步
void nextPermutation(vector<int>& nums) { int size = nums.size(); if (! size || size == 1) return; int i, j; // 找到最后一对升序对, 并把指针停留在前面小的那个元素的位置 for (i = size - 2; i >= 0; i--) if (nums[i] < nums[i + 1]) break; // 如果i小于0, 说明没有升序对, 整个数组都是降序的, 直接逆转数组 if (i < 0) return reverse(nums.begin(), nums.end()); // 然后找到最后一个比nums[i]大的数的位置 for (j = size - 1; j > i; j--) if (nums[j] > nums[i]) break; // 交换i, j位置上的元素 swap(nums[i], nums[j]); // 最后把i后面所有的元素逆转 reverse(nums.begin() + i + 1, nums.end()); }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法