【问题标题】:How do I print integers from a const unsorted array in descending order which I cannot create a copy of?如何按降序打印无法创建副本的 const 未排序数组中的整数?
【发布时间】:2020-03-17 00:45:01
【问题描述】:

例如,如果给定{3, 0, 9, 99, 1},我希望它是 {99, 9 ,3, 1, 0}。我尝试创建另一个数组来存储该值,因为我每次都找到下一个最大值,但我无法实现。 (新的 C 程序员)。任何帮助表示赞赏,想尝试在 O(n^2) 中解决这个问题

【问题讨论】:

  • 为什么需要创建另一个数组?正如您所说,为什么不简单地扫描下一个最大值并打印它? [处理两个或多个相等的值我作为练习留下。] 对于您打印的每个 n 值,您将扫描所有 n 值(通常),给出您想要/期望的 O(n^2)。 [或者,您是否允许构建一个可以排序的辅助索引数组?]
  • 如何每次都找到下一个最大的元素?会不会陷入无限循环

标签: c logic


【解决方案1】:

与您声称的相反,我认为问题不在于实施解决方案。如果是这样,您将指定您在实施时遇到的问题。但你没有,所以我认为这是算法本身的问题。

您要求的解决方案需要 O(1) 内存和 O(N^2) 时间。这实际上比要求的要大。通过就地排序数组然后打印它,需要 O(1) 内存和 O(N log N) 时间的解决方案是possible

但是让我们假设您想要一个非破坏性的解决方案,这意味着不修改输入数组。下面是这样一个需要O(1)内存和O(N^2)时间的解决方案:

  1. 设置 max = 最大整数。
  2. 设置计数 = 0。
  3. 虽然 count 小于数组中的元素数,但
    1. 设置下一个 = 最小整数。
    2. 对于数组的每个元素,
      1. 如果元素的值等于最大值,
        1. 打印元素的值。
        2. 递增计数。
      2. 否则,
        1. 如果元素的值大于next且小于max,
          1. 在元素值旁边设置
    3. 设置 max = next。

在 C 中实现这些步骤中的每一个都是微不足道的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2014-03-16
    • 2011-02-09
    • 2022-01-05
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多