1. 程式人生 > >Lintcode190 Next Permutation II solution 題解

Lintcode190 Next Permutation II solution 題解

implement pos cal mut 返回 all lex http number

【題目描述】

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).

給定一個若幹整數的排列,給出按正數大小進行字典序從小到大排序後的下一個排列。

如果沒有下一個排列,則輸出字典序最小的序列。

【題目鏈接】

www.lintcode.com/en/problem/next-permutation-ii/

【題目解析】

首先找到需要變大的那一位。因為求的是next permutation,所以增大位數要盡量靠右邊同時增大的數值要盡量小。具體方法如下:

1) 從數組尾部開始,依次找每一位數離它最近的比它小的數的位置(即要變大的位置),記錄下這個數和離它最近的比它小的數的index。每一位數得到的結果都和之前保存的結果做比較,保留index最大的要變大的位置和找到這個位置的數的位置,當要變大的位置相同時,保留數值較小的找到這個位置的數的位置。

2) 遍歷完整個數組後,根據得到的結果,將要變大位置的數和找到這個位置的數交換位置,並返回變大的位置

3) 將數組從變大的位置的後一位開始從小到大排序即可。這裏因為要求inplace所以用了bubble sort,若可以用額外空間還能用更快的排序方法。

【參考答案】

www.jiuzhang.com/solutions/next-permutation-ii/

Lintcode190 Next Permutation II solution 題解