class Solution {
public:
    vector<int> nextPermutation(vector<int> &nums) {
        if (nums.empty()) {
            return {};
        }
        int idx = static_cast<int>(nums.size()) - 1;
        for (int i =  static_cast<int>(nums.size()) - 2; i >= 0; --i) {
            if (nums[i] >= nums[i + 1]) {
                idx = i; 
            } else {
                break; 
            }
        }
        int swap_idx = idx; // easy to lose
        while (swap_idx + 1 < nums.size() && nums[swap_idx + 1] > nums[idx - 1]) {
            ++swap_idx; 
        }
        if (idx) {
            swap(nums[swap_idx], nums[idx - 1]);
        }
        sort(nums.begin() + idx, nums.end()); 
        
        return nums; 
    }
};

shiyang6017
158 声望59 粉丝

« 上一篇
第k个排列
下一篇 »
最大子数组差