【问题标题】:Sorting array ascending with duplicates at the end also sorted ascending对数组进行升序排序,最后有重复项也按升序排序
【发布时间】:2021-06-10 20:32:20
【问题描述】:

我正在尝试对 [3,2,1,2,4,5,3] 之类的数组进行排序,使其按升序排序,但所有重复项按排序顺序分组在末尾。所以数组的结果是 [1,4,5,2,2,3,3]。如果不使用内置在 sort() 中的 python,我该如何做到这一点?

【问题讨论】:

  • 您能解释一下就地要求吗?这似乎至少需要某种可能与数组一样大的辅助数据结构。
  • 就地我的意思是使用多个指针和/或临时变量插入到原始数组中

标签: python arrays algorithm sorting data-structures


【解决方案1】:

您可以将key 参数指定为元组(值是否重复,值本身):

sort(l, key=lambda v: (l.count(v) > 1, v))

【讨论】:

    【解决方案2】:

    分两个阶段进行。

    1. 只需使用您最喜欢的就地排序算法对数组进行就地排序
    2. 从右到左扫描排序数组,找到第一个DU 子数组(其中D 是一堆重复值,U 是唯一元素的尾部)。把它变成UD。继续。

    第二阶段在O(n)完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2016-02-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多