其他分享
首页 > 其他分享> > LeetCode 31

LeetCode 31

作者:互联网

下一个排列

在这里插入图片描述

分析

首先说一件比较尴尬的事情,就是这个题目确实有面试官问到过我,我开始给出的回答就是直接找到第一逆序的地方交换就好了,没有考虑到其实找到之后应该继续从后往前找到最合适的。其实这是一个贪心的算法,当时面试官还是很棒的,给我了一个例子让我跑一下我就发现了问题,然后补足了这个地方。其实题还是要多刷刷,否则很容易出现思维漏洞。

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        if (!nums.size() || nums.size() == 1)return;
        int i = nums.size() - 2, j =nums.size()-1, k = nums.size() - 1;
        int flag = 0;
        while (i>=0&&j>=0&&nums[i] >= nums[j]) {
            i--;
            j--;
        }
        if (i >= 0) {
            while (i >= 0 && k >= 0 && nums[i] >= nums[k])k--;
            swap(nums[i], nums[k]);
        }
        int cure = nums.size()-1;
        while (j <= cure) {
            swap(nums[j], nums[cure]);
            cure--;
            j++;
        }
    }
};

标签:nums,--,31,while,cure,&&,LeetCode,size
来源: https://blog.csdn.net/JustDreamer/article/details/113739937