当前位置: 首页 > 面试题库 >

列出数字的所有唯一排列的算法包含重复项

钱旻
2023-03-14
问题内容

问题是:给定一个可能包含重复项的数字集合,请返回所有唯一排列。

天真的方法是使用一组(在C ++中)保存排列。这需要O(n!×log(n!))时间。有更好的解决方案吗?


问题答案:

最简单的方法如下:

  1. 排序列表: O(n lg n)
  2. 排序列表是第一个排列
  3. 重复从上一个生成“下一个”排列:O(n! * <complexity of finding next permutaion>)
    步骤3可以通过将下一个排列定义为如果排列列表已排序在当前排列之后直接出现的排列来完成,例如:
1, 2, 2, 3
1, 2, 3, 2
1, 3, 2, 2
2, 1, 2, 3
2, 1, 3, 2
2, 2, 1, 3
...

查找下一个词典编排是O(n),并且在维基百科页面上以词典编排顺序在Generation标题下给出了简单的排列描述。如果您有雄心壮志,则可以使用简单的更改在O(1)中生成下一个排列



 类似资料:
  • 我正在尝试编写一种方法来将数组置换为所有可能的排列。我将每个数组以ArrayList的形式,翻转两个元素,然后将ArrayList返回到ArrayList of ArrayList。如果我在翻转两个元素后将每个数组打印到屏幕上,则按预期进行打印。[1,2,3]前两个元素翻转打印为[2,1,3],但当我将置换的ArrayList添加到另一个ArrayList时,它们都打印为[1,2,3] 代码: 输

  • 我有五个属性的列表,每个属性有五个不同的值。我想生成它们的笛卡尔乘积,并过滤所有独特的排列。 一些背景: 我需要它们作为我的输入值来解决逻辑难题。在那里我对照他们检查规则以找到正确的解决方案。 也许一个简化的例子就能说清楚。 数据: 数据的笛卡尔乘积: 我想要的是: 我不想要的是: 我不希望同一个值多次出现。位置很重要,因此它应该具有置换性质,对于包含五个元素的列表,它应该具有置换性质。我猜输出大

  • 问题内容: 我在MySQL中有一个这样的表: 我怎样才能有MySQL查询来列出像这样的重复项? 重复搜索的结果: 问题答案: SELECT a., b.totalCount AS Duplicate FROM tablename a INNER JOIN ( SELECT email, COUNT( ) totalCount FROM tableName GROUP BY email ) b ON

  • 我有一个数据帧,其中重复了一些 SongId。我想提取那些重复的行。知道怎么做吗?试: 但是效果不好。 这是我的数据帧的一个示例。在此示例中重复 SongId 0、10 和 16:

  • 我有个名单 我需要用java生成一组列表,如下所示 以下是我目前的代码 输出 预期

  • 本文向大家介绍检查列表是否包含Python中的所有唯一元素,包括了检查列表是否包含Python中的所有唯一元素的使用技巧和注意事项,需要的朋友参考一下 python中的列表可以包含所有元素,这些元素可能是唯一的,也可能不是唯一的。但是对于需要特殊元素的情况,例如标记班级不同卷号的出勤率。以下是可以使用的方法。 用 python集是无序,未索引且还包含唯一元素的集合。因此,我们将比较从列表创建的集合