您的位置:首页 > 其它

下一个排列

2015-09-16 23:15 246 查看
给定一个整数数组来表示排列,找出其之后的一个排列。

样例

给出排列
[1,3,2,3]
,其下一个排列是
[1,3,3,2]


给出排列
[4,3,2,1]
,其下一个排列是
[1,2,3,4]


注意

排列中可能包含重复的整数

class Solution {
public:
/**
* @param nums: An array of integers
* @return: An array of integers that's next permuation
*/
vector<int> nextPermutation(vector<int> &nums) {
// write your code here
int n = nums.size();
int i = n-1;
for (; i > 0; i--)
{
if (nums[i] > nums[i-1])
{
int j = n-1;
for (; j >= i; j--)
{
if (nums[j] > nums[i-1])
{
break;
}
}
swap(nums[i-1], nums[j]);
int left = i;
int right = n-1;
while (left < right)
{
swap(nums[left], nums[right]);
left++;
right--;
}

break;
}
}

if (i == 0)
{
int left = 0;
int right = n-1;
while (left < right)
{
swap(nums[left], nums[right]);
left++;
right--;
}
}

return nums;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: