欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)LeetCode(31.下一個排列)

 更新時間:2021年07月14日 10:25:17   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(31.下一個排列),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 31. Next Permutation 下一個排列

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place and use only constant extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.

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

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

1  2  7  4  3  1

下一個排列為:

1  3  1  2  4  7

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

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());
    }
};

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

解法二:

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());
    }
};

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(31.下一個排列)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)下一個排列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解C++智能指針的使用

    深入了解C++智能指針的使用

    智能指針的本質(zhì)就是使用一個對象來接管一段開辟的空間,在該對象在銷毀的時候,自動調(diào)用析構(gòu)函數(shù)來釋放這段內(nèi)存。本文就來和大家詳細(xì)聊聊智能指針的使用,需要的可以參考一下
    2022-10-10
  • C語言實(shí)現(xiàn)貪吃蛇游戲代碼

    C語言實(shí)現(xiàn)貪吃蛇游戲代碼

    大家好,本篇文章主要講的是C語言實(shí)現(xiàn)貪吃蛇游戲代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • c++ 構(gòu)造函數(shù)的初始化列表

    c++ 構(gòu)造函數(shù)的初始化列表

    構(gòu)造函數(shù)的初始化列表僅僅指定用于初始化成員的值,并不指定這些初始化執(zhí)行的次序。成員初始化的次序就是定義成員的次序,第一個成員首先被初始化,然后是第二個,依次類推
    2013-07-07
  • VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法

    VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法

    這篇文章主要介紹了VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動畫的方法,需要的朋友可以參考下
    2014-07-07
  • C/C++淺析鄰接表拓?fù)渑判蛩惴ǖ膶?shí)現(xiàn)

    C/C++淺析鄰接表拓?fù)渑判蛩惴ǖ膶?shí)現(xiàn)

    這篇文章主要介紹了C/C++對于鄰接表拓?fù)渑判蛩惴ǖ膶?shí)現(xiàn),鄰接表是圖的一種鏈?zhǔn)酱鎯Ψ椒ǎ鋽?shù)據(jù)結(jié)構(gòu)包括兩部分:節(jié)點(diǎn)和鄰接點(diǎn)
    2022-07-07
  • C++中std::chrono時間庫的全面解析

    C++中std::chrono時間庫的全面解析

    C++?std::chrono時間庫是C++標(biāo)準(zhǔn)庫提供的一個時間處理庫,提供了一個方便、靈活和精確的時間處理工具,下面小編就帶大家深入了解一下std::chrono時間庫的使用吧
    2023-10-10
  • C++ 中回文數(shù)判斷簡單實(shí)例

    C++ 中回文數(shù)判斷簡單實(shí)例

    這篇文章主要介紹了C++ 中回文數(shù)判斷簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 應(yīng)用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    應(yīng)用程序操作NorFlash示例代碼分享(norflash接口使用方法)

    相對于操作NandFlash,操作NorFlash相對簡單,因?yàn)榛静恍枰紤]壞塊,NorFlash也沒有OOB區(qū)域,也跟ECC沒有關(guān)系。讀寫擦除相對容易,下面看個例子吧
    2013-12-12
  • c語言實(shí)現(xiàn)向上取整計算方法

    c語言實(shí)現(xiàn)向上取整計算方法

    這篇文章主要介紹了c語言實(shí)現(xiàn)向上取整計算方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++模板非類型形參的詳細(xì)講解

    C++模板非類型形參的詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于C++模板非類型形參的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作就有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-11-11

最新評論