class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int pos = 0;
        int large_min = 101;
        int large_min_index = 0;

        if(nums.size()<2) return;
        for(int i=nums.size()-1; i>0; i--) {
            //从后往前找  找到逆序
            if(nums[i] > nums[i-1]){
                pos = i;
                break;
            }
        }
        if(pos == 0) {
            for(int i=0; i<nums.size()/2; i++) {
                swap(nums[i],nums[nums.size()-i-1]);
            }
        }else {
            for(int i=pos; i<nums.size(); i++) {
                if(nums[i]>nums[pos-1] && nums[i]<large_min) {
                    large_min = nums[i];
                    large_min_index = i;
                }
            }
            swap(nums[pos-1],nums[large_min_index]);
            sort(nums.begin()+pos,nums.end());
        }
    }
};