将重复项移动到已排序数组的末尾

2024-03-10

我在一次采访中被问到这个问题。 有一个包含重复项的已排序数组。 目标是首先返回具有唯一元素的数组,并在最后返回重复的元素并保持顺序。 例如[1, 1, 2, 3, 4, 4, 5]应该成为[1, 2, 3, 4, 5, 1, 4].

我能够用额外的空间(O(n) 空间)和线性时间(O(n) 时间)来解决这个问题,但我不确定这是否是最好的答案,最好不使用线性空间。

我搜索了stackoverflow,发现了类似的问题,但不完全相同。例如有一个question https://stackoverflow.com/questions/7238023/sorting-an-array-while-moving-duplicates-to-the-end对数组进行排序并将重复项移动到末尾,但在我的情况下,数组已经排序,目标是仅将重复项移到末尾。


如果您的值在有限范围内,则存在 O(n) 时间和 O(1) 空间的解决方案。

确定数组中的最大值。得到一些常数C > arraymax,例如 -C = 10为你的数组。

扫描数组,压缩唯一值并计算每个值的重复项。如果值V has K>0重复,写V+C*K而不是价值。

在下一次扫描时查找具有重复项的值,提取重复项的数量并将其写入压缩后的唯一值之后。

def dedup(lst):
    mx = max(lst) + 1
    dupcnt = 0
    delcnt = 0
    start = 0
    for i in range(1, len(lst) + 1):
        if i == len(lst) or (lst[i] != lst[start]):
            lst[start - delcnt] = lst[start] + dupcnt * mx
            delcnt += dupcnt
            start = i
            dupcnt = 0
        else:
            dupcnt += 1
    dupidx = len(lst) - delcnt
    for i in range(0, len(lst) - delcnt):
        dupcnt = lst[i] // mx
        if dupcnt:
           lst[i] %= mx
           for j in range(dupidx, dupidx+dupcnt):
              lst[j] = lst[i]
           dupidx += dupcnt
    return lst

print(dedup([1,2,2,2,3,4,4,5]))
>>> [1, 2, 3, 4, 5, 2, 2, 4]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将重复项移动到已排序数组的末尾 的相关文章

随机推荐

  • ValueTypes 如何从 Object (ReferenceType) 派生并且仍然是 ValueTypes?

    C 不允许从类派生结构 但所有 ValueType 都从 Object 派生 这种区别是在哪里做出的呢 CLR 如何处理这个问题 C 不允许从类派生结构 你的说法不正确 因此你感到困惑 C does允许结构从类派生 所有结构都派生自同一个类
  • VS 2015中的类库(包)在哪里?

    我正在尝试将类库 包 添加到我的 ASP NET MVC 5 项目中 但由于某种原因我找不到该选项 我是否必须安装其他依赖项才能获得该选项 它现在称为 类库 NET Core
  • 重命名文件源

    我一直在从平面文件源开发 SSIS 包 该文件每天都会出现 文件名具有日期时间指示 如下所示 文件名 20190509042908 txt 我想知道如何才能度过约会部分 我希望包动态读取文件 但它应该在没有最后 6 位数字的情况下通过 我只
  • 使用 MinGW-w64 编译 32 位架构

    我已经安装了 MinGW w64 来编译为 64 位 但看来我必须安装两个单独版本的 MinGW w64 才能获得对 32 位的支持 我尝试过 使用批处理文件和 powershell 脚本等等 但最终效果不是很好 似乎有 multilib
  • Gradle 构建中 dexOptions 中 jumboMode 的用途是什么?

    根据这个帖子 https stackoverflow com a 24224385 1176435它允许 dex 文件中包含更多数量的字符串 但我不太明白它的含义以及对构建的影响 Jumbo 模式与可以引用的字符串数量有关 一个 DEX 文
  • 从 IndexedSeq[DataFrame] 转换为 DataFrame?

    新手问题 我尝试向现有 DataFrame 添加列 我正在使用 Spark 1 4 1 import sqlContext implicits case class Test rule Int val test sc parallelize
  • 从数据框中删除特殊字符和字母数字的简单方法

    我有一个大型数据集 其中有 x 行和 y 列 其中一列为单词和一些不需要的数据 不需要的数据没有特定的模式 因此我发现很难将其从数据框中删除 nonhashtag want better than Dhabi United Arab Emi
  • Cassandra 使用 IN 运算符在聚类列中更新和删除

    这是我的桌子 CREATE TABLE quorum omg id int a int b text c text PRIMARY KEY id a b WITH CLUSTERING ORDER BY b DESC 当我使用 IN 运算符
  • 为什么使用 OR 条件而不是 Union 会导致性能问题

    您好 我在 SP 中有以下查询 CrmContactId 是 SP 的参数 Select distinct A PolicyBusinessId A PolicyDetailId from TPolicyBusiness A inner j
  • F# 将列表转换为树

    我有一个元组 int string 列表 其中 int 是级别 string 是名称 let src 0 root 1 a 2 a1 2 a2 1 b 2 b1 3 b11 2 b2 我需要将其转换为以下内容 let expectingTr
  • 是否可以用公式读取Excel单元格值?

    在我的以下代码中 c4 的值为零 C4 单元格的公式为 SUM C2 C3 EPPlus能够读取带有公式的单元格吗 为什么 c4 被设置为零而不是 12 using var package new ExcelPackage existing
  • Firestore collection.get() 完成操作后返回值

    我正在运行类似于问题的代码这个问题 https stackoverflow com questions 46706433 firebase firestore get data from collection除了 我从每个文档中获取数组并将
  • 如何在android中获取相机拍摄的最后一张图像? [复制]

    这个问题在这里已经有答案了 我的目的不是拍照然后将其保存到 SD 卡 获取链接等等 该图像已使用 Android 中的原始相机应用程序拍摄 我所需要的就是如何获得相对于 SD 卡的图像路径 例如 模拟 0 sdcard DCIM 100AN
  • 在 ASP.Net MVC 视图中显示是/否而不是复选框

    我对 ASP Net MVC 非常陌生 我创建了一个从模型填充的视图 我正在为模型中的每个项目创建一行 以显示模型项目的属性 属性 其中一个成员是 bool 名称是 Staged 在视图中 我想将其显示为 是 如果为真 或 否 如果为假 用
  • 从 Apache Camel 内的 JSON 主体访问数据

    我正在使用一个 API 它基本上允许文件系统的导航 我正在尝试通过 API 从返回的 JSON 中访问数据 以便对其执行功能 下面是我使用访问 API 的代码 我尝试使用 unmarshal 来 将返回的 JSON 转换为 Map from
  • 在 Mac 上调试 php?

    想知道在本地计算机上调试 PHP 的最佳方法是什么 我在 mac os 10 5 上使用 MAMP 谢谢 帕特里克 Using xdebug http xdebug org 是一个好的开始 下载软件包并按照其中的说明进行操作INSTALL文
  • JPA双向关系-无限循环/循环引用

    我有双向关系 Entity Table name facility public class Facility implements Serializable Id GeneratedValue private Long id OneToM
  • 具有重复值和后缀的列表

    我有一个清单 a a a b c 并且需要使用后缀重复一些值 ind这样添加 顺序很重要 a a ind b b ind c c ind I tried b x x ind for x in a c item for sublist in
  • python中的Turtle模块未导入[重复]

    这个问题在这里已经有答案了 这是我第一次在 python 中使用turtle模块 但我似乎无法导入它 这是我的代码 from turtle import pen1 Pen pen2 Pen pen1 screen bgcolour 2928
  • 将重复项移动到已排序数组的末尾

    我在一次采访中被问到这个问题 有一个包含重复项的已排序数组 目标是首先返回具有唯一元素的数组 并在最后返回重复的元素并保持顺序 例如 1 1 2 3 4 4 5 应该成为 1 2 3 4 5 1 4 我能够用额外的空间 O n 空间 和线性