LeetCode刷題(中等程度)31 下乙個排列

2021-10-10 13:40:55 字數 884 閱讀 3048

實現獲取 下乙個排列 的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。

如果不存在下乙個更大的排列,則將數字重新排列成最小的排列(即公升序排列)。

必須 原地 修改,只允許使用額外常數空間。

示例 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的位置,更新當前的最小長度 時間複雜度...