less than 1 minute read

<-M 31> Next Permutation

// Method 1
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int n = nums.size(), k, l;
    	for (k = n - 2; k >= 0; k--) {
            if (nums[k] < nums[k + 1]) {
                break;
            }
        }
    	if (k < 0) {
    	    reverse(nums.begin(), nums.end());
    	} else {
    	    for (l = n - 1; l > k; l--) {
                if (nums[l] > nums[k]) {
                    break;
                }
            }
    	    swap(nums[k], nums[l]);
    	    reverse(nums.begin() + k + 1, nums.end());
        }
    }
};

// Method 2
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int n = nums.size() - 1;
        int infpt = 0;
        for(int i = n; i > 0; i--) {
            if(nums[i] > nums[i - 1]) {
                infpt = i;
                break;
            }
        }
        if(infpt == 0) {
            sort(nums.begin(), nums.end());
        }
        else {
            int toswap = nums[infpt - 1];
            int min = INT_MAX;
            for(int j = infpt; j <= n; j++) {
                if(nums[j] - toswap > 0 and nums[j] - toswap < min) {
                    int temp = nums[j];
                    nums[j] =  nums[infpt - 1];
                    nums[infpt - 1] = temp;
                }
            }
            sort(nums.begin()+infpt,nums.end());
        }
    }
};