亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++下一個排列問題怎么解決

發布時間:2022-10-22 15:35:00 來源:億速云 閱讀:119 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“C++下一個排列問題怎么解決”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++下一個排列問題怎么解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

下一個排列

1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

這道題讓我們求下一個排列順序,由題目中給的例子可以看出來,如果給定數組是降序,則說明是全排列的最后一種情況,則下一個排列就是最初始情況,可以參見之前的博客 Permutations。再來看下面一個例子,有如下的一個數組

1  2  7  4  3  1

下一個排列為:

1  3  1  2  4  7

那么是如何得到的呢,我們通過觀察原數組可以發現,如果從末尾往前看,數字逐漸變大,到了2時才減小的,然后再從后往前找第一個比2大的數字,是3,那么我們交換2和3,再把此時3后面的所有數字轉置一下即可,步驟如下:

1  2  7  4  3  1

1  2  7  4  3  1

1  3  7  4  2  1

1  3  1  2  4  7

解法一:

class Solution {
public:
    void nextPermutation(vector<int> &num) {
        int i, j, n = num.size();
        for (i = n - 2; i >= 0; --i) {
            if (num[i + 1] > num[i]) {
                for (j = n - 1; j > i; --j) {
                    if (num[j] > num[i]) break;
                }
                swap(num[i], num[j]);
                reverse(num.begin() + i + 1, num.end());
                return;
            }
        }
        reverse(num.begin(), num.end());
    }
};

下面這種寫法更簡潔一些,但是整體思路和上面的解法沒有什么區別,參見代碼如下:

解法二:

class Solution {
public:
    void nextPermutation(vector<int>& nums) {int n = nums.size(), i = n - 2, j = n - 1;
        while (i >= 0 && nums[i] >= nums[i + 1]) --i;
        if (i >= 0) {
            while (nums[j] <= nums[i]) --j;
            swap(nums[i], nums[j]);
        }
        reverse(nums.begin() + i + 1, nums.end());
    }
};

讀到這里,這篇“C++下一個排列問題怎么解決”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

宝鸡市| 永川市| 孝义市| 新余市| 辽阳市| 航空| 阿克陶县| 会东县| 益阳市| 开鲁县| 普宁市| 杭锦后旗| 呼图壁县| 金堂县| 汾阳市| 龙海市| 尖扎县| 宜阳县| 山东| 溧阳市| 盐亭县| 延川县| 阿鲁科尔沁旗| 安顺市| 竹北市| 温宿县| 乌兰察布市| 赫章县| 沙坪坝区| 青铜峡市| 威宁| 禄丰县| 肥城市| 友谊县| 吉林市| 平顺县| 达孜县| 文登市| 惠水县| 上虞市| 莒南县|