給定乙個整數陣列來表示排列,找出其上乙個排列。
樣例 給出排列[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 交換這兩個數的位置,將遞增數列...