实施下一个排列,对于给定大小为N的数组A,将数字重新排列为数字的下一个更大的排列。
如果无法进行这种排列,则必须将其重新排列为最低可能的顺序,即以升序排列。
此问题的测试案例包括:
输入:
A = [20, 50, 113]
输出:
[20, 113, 50]
[20, 113, 50]
比[20, 50, 113]
大吗?
类似地,
输入:
A = [5, 18, 9]
输出:
[9, 5, 18]
这是下一个排列而不是[5,9,18]
的排列方式吗?
答案 0 :(得分:1)
[20,113,50]大于[20,50,113]是多少?
因为它在字典上大于 ,所以它的工作原理如下:
如果第一项大于或小于则为结果。
否则,如果它们相等,则如果第二项大于或小于则为结果。
否则,如果它们相等,则如果第三项大于或小于则为结果。
否则它们是相等的。
之所以[20, 113, 50] > [20, 50, 113]
是因为在步骤1:20 == 20
和步骤2:113 > 50
中。
同样,[5, 9, 18] < [5, 18, 9]
是因为9 < 18
和[9, 5, 18] > [5, 18, 9]
是因为9 > 5
。
答案 1 :(得分:0)
[20, 113, 50] 如何大于 [20, 50, 113]?
在[20, 50, 113]
中,最后一个增加length-2的区间是[50, 113]
,然后我们选择[113, 113]
(eq. to [113]
)中的第一个元素from从右到左,使其大于 50
。用50
交换它,然后反转间隔(50, 113]
,这会给你[20, 113, 50]
。
输出:[9, 5, 18]
\n 这个下一个排列是如何而不是 [5,9,18]?
从 A = [5, 18, 9]
找到 [5, 18]
,
从 [18, 9]
找到 9
,
交换(5
,9
) 获取[9, 18, 5]
,
反向([18, 5]
)得到[5, 18]
,
所以你得到:[9, 5, 18]
。