NC194. 下一个排列
描述
示例1
输入:
[1,2,3]
输出:
[1,3,2]
示例2
输入:
[3,2,1]
输出:
[1,2,3]
说明:
[3,2,1]是当前最大的数组排列了,不存在比它更大的了,故返回最小的数组排列示例3
输入:
[2]
输出:
[2]
C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2022-01-22
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> nextPermutation(vector<int>& nums) { // write code here next_permutation(nums.begin(), nums.end()); return nums; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 416KB, 提交时间: 2021-12-06
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> nextPermutation(vector<int>& nums) { // write code here int i = nums.size()-1; vector<int> tmp; for(i; i>=0;i--){ if(i == 0) break; else if(nums[i] > nums[i-1]){ int t = nums[i]; nums[i] = nums[i-1]; nums[i-1] = t; break; } tmp.push_back(nums[i]); } if(i == 0){ tmp.push_back(nums[0]); return tmp; } vector<int> res; for(int j = 0; j<=i;j++){ res.push_back(nums[j]); } for(int j = 0; j < tmp.size();j++){ res.push_back(tmp[j]); } return res; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 388KB, 提交时间: 2022-07-12
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> nextPermutation(vector<int>& nums) { // write code here if(nums.size()==1)return nums; int pos=nums.size()-2; for(;pos>=-1;pos--){ if(pos==-1)break; if(nums[pos]<nums[pos+1])break; } if(pos==-1){ sort(nums.begin(),nums.end()); return nums; } else{ int base=nums[pos]; int diff=INT_MAX; int greatlit=pos; for(int i=pos+1;i<nums.size();i++){ int diffins=nums[i]-base; if(diffins>0&&diffins<diff){ greatlit=i; diff=diffins; } } swap(nums[pos],nums[greatlit]); sort(nums.begin()+pos+1,nums.end()); return nums; } } };
C++ 解法, 执行用时: 3ms, 内存消耗: 388KB, 提交时间: 2022-02-18
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> nextPermutation(vector<int>& nums) { // write code here int len=nums.size(); if(len==1) return nums; if(len==2){ swap(nums[0], nums[1]); return nums; } int i=len-1; while(i>0 && nums[i]<=nums[i-1]) --i; if(i==len-1){ swap(nums[len-1], nums[len-2]); return nums; } if(i==0){ sort(nums.begin(), nums.end()); return nums; } int idx=i-1; i=len-1; int swapIdx=-1; while(i>idx){ if(nums[i]>nums[idx]){ if(swapIdx==-1 || nums[i]<nums[swapIdx]) swapIdx=i; } --i; } swap(nums[idx], nums[swapIdx]); sort(nums.begin()+idx+1, nums.end()); return nums; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 392KB, 提交时间: 2022-05-04
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> nextPermutation(vector<int>& nums) { // write code here int i=nums.size()-2; while(i>=0&&nums[i]>nums[i+1]) { i--; } if(i>0) { int j=nums.size()-1; while(j>=i+1&&nums[j]<nums[i]) { j--; } swap(nums[i],nums[j]); } sort(nums.begin()+i+1,nums.end()); return nums; } };