重新排列列表中的项目,以使相邻的两个项目都不相同

艾琳

我们如何最有效地做到这一点?给定具有重复项目的列表,任务是重新排列列表中的项目,以使两个相邻项目都不相同。

Input: [1,1,1,2,3] 
Output: [1,2,1,3,1] 

Input: [1,1,1,2,2]
Output: [1,2,1,2,1] 

Input: [1,1]
Output: Not Possible

Input: [1,1,1,1,2,3] 
Output: Not Possible

编辑:通用算法也很好!不需要是Python。

凯杜尔

我不擅长python,因此我在这里编写一般算法-

  1. 建立一个最大堆maxHeap存储数字及其频率<array element, frequency>maxHeap将根据元素的频率进行排序。

  2. 创建一个临时Key,它将用作上一个访问的元素(结果数组中的上一个元素。将其初始化为)<item = -inf , freq = -1>

  3. 虽然maxHeap不为空

    • 弹出一个元素并将其添加到结果中。
    • 将弹出元素的频率降低1
    • 如果前一个元素的频率> 0,则将其推回最大堆中
    • 将当前元素作为下一个迭代的前一个元素。
  4. 如果结果数组的长度和原始数组的长度相同,则此数组没有解决方案。否则返回结果数组。

编辑

那些想知道为什么通过每次跳过一个位置将当前最频繁的元素置于偶数/奇数位置的贪婪解决方案不起作用的方法,可以尝试一下用例[1 1 2 2 3 3]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

关联列表中的两个项目

Java中两个大小不相同的数组列表如何比较大小和打印差异

如何重新排列图例中的项目?

重新排列图库中的fancybox项目

有没有一种方法可以随机排列数组,以使两个连续的值都不相同?

改组字符串,使相邻的两个字母都不相同

如何检查两个元组的所有成员是否都不相同?

SQL查询2个表,在给定日期范围内两个表的值都不相同

比较两个不同表中的不相同字段

检查两个项目是否在列表中,但不是按固定顺序排列?

如何在R中生成随机整数,以使两个连续的数字都不相同

匹配两个或两个以上不相同的字符

重新排列阵列中的特定项目

是否可以在同一解决方案下创建两个基于服务总线队列而两个队列都不相同的Azure函数?

如果两个单元格都不相同,是否可以使我的Excel单元格等于另一个单元格?

R重新排列数据框:将一些列项目放在列表中

仅当两个列都不相同时才插入

合并和重新排列两个对象数组

重新排列字母并比较两个单词

Java 8如何从两个集合中过滤不相同的实体?

在两个表中查找不相同的文本

重新排列对象中每隔两个键

如何检查和删除python中两个不同目录中不相同的文件?

重新排列 reactstrap 中的列表组项目

为什么两个地块不相同

React:Material-UI - 如何设置两个项目列表的样式,使项目彼此相邻?

重新排列数组,使得没有两个相邻的元素是相同的

合并两个不相同的数组对象,在 Typescript 中匹配相同的键

检查两个不同列中的值并替换不相同的值