下一个排列定义

时间:2019-11-14 14:38:47

标签: c++ arrays permutation

实施下一个排列,对于给定大小为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]的排列方式吗?

2 个答案:

答案 0 :(得分:1)

  

[20,113,50]大于[20,50,113]是多少?

因为它在字典上大于 ,所以它的工作原理如下:

  1. 如果第一项大于或小于则为结果。

  2. 否则,如果它们相等,则如果第二项大于或小于则为结果。

  3. 否则,如果它们相等,则如果第三项大于或小于则为结果。

  4. 否则它们是相等的。

之所以[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)

  1. <块引用>

    [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]

  2. <块引用>

    输出:[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]