Lintcode 上乙個排列

2021-08-01 05:47:31 字數 786 閱讀 3513

給定乙個整數陣列來表示排列,找出其上乙個排列。

樣例 給出排列[1,3,2,3],其上乙個排列是[1,2,3,3]

給出排列[1,2,3,4],其上乙個排列是[4,3,2,1]

解釋:所謂的上乙個排列其實就是把給定數字組合,並從大到小排列,找到與給定排列最接近,且比它小的排列(即其上乙個排列)。

比如:[1,3,2,3],上乙個是[1,2,3,3],下乙個是[1,3,3,2]是按公升序排列。

思路:對於排列nums,從右至左,依次比較每位數字與前一位數字大小。

如果得到位置為-1,則將原排列逆序;否則得到此位置j,與前一位置j-1,從j位置起向右尋找以乙個大於nums[j-1]的數,找到位置i,交換nums[i]與nums[j-1]。

將nums從位置j開始逆序,得到最終結果。

具體說明:

例如排列[6,3,6,2,4,5,7,8],對於63624578,得到nums[3]=2,nums[2]=6,向右尋找到nums[6]=7>6,交換得到63724568,

從nums[3]=2位置開始逆序,得到最終結果63786542.

#ifndef c51_h

#define c51_h

#include

#include

using

namespace

std;

class solution

}if (pos == -1)

else}}

return nums;

}};#endif

Lintcode 上乙個排列

給定乙個整數陣列來表示排列,找出其上乙個排列。注意事項 排列中可能包含重複的整數 您在真實的面試中是否遇到過這個題?yes 樣例給出排列 1,3,2,3 其上乙個排列是 1,2,3,3 給出排列 1,2,3,4 其上乙個排列是 4,3,2,1 標籤 排列 思路 逆序找到第乙個不是遞減的數字置為i,從...

51 上乙個排列

2017.9.25 可以理解為下乙個排列的逆思路。下乙個排列,是將乙個公升序序列逐步調整為降序序列的過程。上乙個排列,可以理解為將乙個降序序列逐步調整為公升序序列的過程。這樣,首先就是從後向前遍歷找到 num flag num flag 1 然後再從後向前遍歷,找到比num flag 小的最大值。交...

LintCode 下乙個排列

題目 給定乙個整數陣列來表示排列,找出其之後的乙個排列。樣例 給出排列 1,3,2,3 其下乙個排列是 1,3,3,2 給出排列 4,3,2,1 其下乙個排列是 1,2,3,4 思路 1 從右向左找到第乙個遞增數列 2 找到遞增數列中最小的比遞增數列前乙個數大的數 3 交換這兩個數的位置,將遞增數列...