【问题标题】:Searching for duplicates with Big-O time constraints搜索具有 Big-O 时间限制的重复项
【发布时间】:2023-03-17 22:24:01
【问题描述】:

对于分配,我将创建一个构造函数,以 String[] names 和 int[] rank 作为参数,在 O(n log n):

(数据验证):

  1. 检查namesrank的长度是否相同---(时间:O(1)
  2. 检查 namesrank 是否不为空 ---(时间:O(1)
  3. 检查 names 不包含任何重复或空字符串 --- (时间: O(n^2)) ???
  4. 检查 rank 是否仅包含不同的元素 ---(时间:???)

(实际对象声明):

  • namesrank的每个索引值添加到自定义类型的ArrayList中(时间:O(n)

对于这个项目,我不允许使用除数组和 ArrayLists 之外的任何数据结构(没有 Map 或 Set 接口),但我可以使用 Arrays 类中的方法来搜索和排序数组。我看不出如何在 O(n log n) 时间内完成所有这些事情。我尤其不知道如何在不到 O(n^2) 的时间内完成第 3 步。感谢您的帮助!

【问题讨论】:

    标签: java arrays time arraylist big-o


    【解决方案1】:

    步骤 1 和 2 很简单。

    第 3 步:

    • 使用Arrays.sort(array) => O(n log n) 对数组进行排序
    • 遍历数组检查每个条目与下一个条目(以查看是否找到重复项)=> O(n)

    ==> 总计 = O (n log n)

    第 4 步:相同的方法

    【讨论】:

    • 感谢您的回复!拥有一个排序数组意味着我只需要比较 names[i] 和 names[i+1]、names[i+1] 和 names[i+2] 等等。以前没有考虑过这个。
    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 2016-07-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多