實現獲取 下乙個排列 的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。
如果不存在下乙個更大的排列,則將數字重新排列成最小的排列(即公升序排列)。
必須 原地 修改,只允許使用額外常數空間。
示例 1:
輸入:nums = [1,2,3]
輸出:[1,3,2]
示例 2:
輸入:nums = [3,2,1]
輸出:[1,2,3]
示例 3:
輸入:nums = [1,1,5]
輸出:[1,5,1]
示例 4:
輸入:nums = [1]
輸出:[1]
1 <= nums.length <= 100
0 <= nums[i] <= 100
思路:根據stl原始碼剖析中實現的思路。首先,從最尾端開始往前尋找兩個相鄰元素 令第乙個元素為*i
,第二個元素為*ii
,找到這樣一組相鄰元素後,再從最尾端開始往前校驗找出第乙個大於*i
的元素,記為*j
,再將i
,j
元素對角,然後再將ii
之後的元素逆序重排,這樣就是求得下乙個排列。(abc,acb,bac,bca,cab,cba
)。
class solution
//找到之後交換
swap(nums[i],nums[j]);
reverse(nums.begin() + ii,nums.end());//將ii之後的元素全部逆向排列
return;
}if(i == 0)//進行到最前面了}}
};
LeetCode刷題(中等程度) 554 磚牆
你的面前有一堵矩形的 由多行磚塊組成的磚牆。這些磚塊高度相同但是寬度不同。你現在要畫一條自頂向下的 穿過最少磚塊的垂線。磚牆由行的列表表示。每一行都是乙個代表從左至右每塊磚的寬度的整數列表。如果你畫的線只是從磚塊的邊緣經過,就不算穿過這塊磚。你需要找出怎樣畫才能使這條線穿過的磚塊數量最少,並且返回穿...
LeetCode刷題(中等程度) 2 兩數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
leetcode刷題記錄 17 中等
題目 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。思路 從頭開始,找到第乙個和 s的子陣列,然後右指標往右移動1位,左指標移動到使得當前子陣列剛好 s的位置,更新當前的最小長度 時間複雜度...