LeetCode 31. 下一个排列(线性扫描)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 31. 下一个排列(线性扫描)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 題目
實(shí)現(xiàn)獲取下一個排列的函數(shù),算法需要將給定數(shù)字序列重新排列成字典序中下一個更大的排列。
如果不存在下一個更大的排列,則將數(shù)字重新排列成最小的排列(即升序排列)。
必須原地修改,只允許使用額外常數(shù)空間。
以下是一些例子,輸入位于左側(cè)列,其相應(yīng)輸出位于右側(cè)列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/next-permutation
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
2. 解題
- 類似的題目:
程序員面試金典 - 面試題 05.04. 下一個數(shù)(線性掃描)
LeetCode 1053. 交換一次的先前排列
2.1 next_permutation
bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last); 沒有下一個更小或者更大的,返回的是false class Solution { public:void nextPermutation(vector<int>& nums) {next_permutation(nums.begin(),nums.end());} };4 ms 6.8 MB
2.2 從后往前找第一個下降點(diǎn)
- 找到下降點(diǎn) i
- 向后找比 i 點(diǎn)大的最小的數(shù),進(jìn)行交換
- 最后把 i 后面的數(shù)字升序排列(反轉(zhuǎn)即可)
0 ms 6.9 MB
總結(jié)
以上是生活随笔為你收集整理的LeetCode 31. 下一个排列(线性扫描)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员面试金典 - 面试题 05.07.
- 下一篇: LeetCode 138. 复制带随机指