下一个排列定义
Next Permutation definition
实现下一个排列,它将数字重新排列为大小为 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]
如何?
怎么大于 [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
。
怎么大于 [20, 50, 113]?
在
[20, 50, 113]
中,最后一个递增的 length-2 区间是[50, 113]
,然后我们从右到左选取[113, 113]
中的第一个元素(方程到[113]
),使其大于50
。用50
交换,然后反转间隔(50, 113]
,这样会给你[20, 113, 50]
。输出 :
[9, 5, 18]
下一个排列而不是 [5,9,18] 如何?从
A = [5, 18, 9]
找到[5, 18]
,
从找到[18, 9]
9
,
交换(5
,9
) 得到[9, 18, 5]
,
反向([18, 5]
) 得到[5, 18]
,
所以你得到:[9, 5, 18]
.
下一个排列表示下一个最大的数字
例如 如果一个数组是 arr = {1, 2, 3, 6, 5, 4}
那么这个数字就123654
它的下一个更大的元素是124356;
所以返回数组 {1, 2, 4, 3, 5, 6}。
- 在提升multi_index容器中,是否定义了"default index"?
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 为什么不;名字在地图上是按顺序排列的吗
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 下一个排列定义
- 在接受用户定义的文字的排列时,防止过载爆炸
- C++结构来定义数据的排列和访问方式
- C++ 自定义映射键/值不按顺序排列