【问题标题】:Optimized c++ code with Time complexity as O(n2) and space complexity as O(1) for following input优化的 c++ 代码,时间复杂度为 O(n2),空间复杂度为 O(1),用于后续输入
【发布时间】:2015-02-21 18:23:56
【问题描述】:

数组 i/p : 1 0 0 2 1 0 2 1

注意:只有 3 个数字,即 0,1,2。 我们必须使用的一个函数是:SWAP(arr,index1,index2) 实现方法是: 无效排序(int arr[],int 长度)

预期 o/p:0 0 0 1 1 1 2 2

【问题讨论】:

    标签: c++ performance optimization


    【解决方案1】:

    有许多算法可以对数字数组进行排序。最简单的——冒泡排序的时间复杂度为 O(n2),空间复杂度为 O(1)。

    更多 O(n2) 排序算法:选择排序和插入排序。

    但是,有更好的算法可以实现 O(n.logn) 的时间复杂度 - 合并排序、快速排序等。

    只有 3 个数字是什么意思:0,1,2。 如果输入是固定的,并且我们知道只有这 3 个数字,那么最简单的排序方法是计算每个数字的出现次数。对于这个例子:

    occurrences[0] = 3; occurrences[1] = 3; occurrences[2] = 2;

    然后您可以简单地写入输出数组,每个数字重复出现次数[] 中的次数。 该解决方案的时间复杂度:O(m) 该解决方案的空间复杂度:O(m) 这里要注意的重要一点是“m”是可能的数字的数量,所以这里 m = 3 而不是输入数组中的整数数量 - 我们称之为“n”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2015-01-06
      • 2017-09-01
      • 1970-01-01
      相关资源
      最近更新 更多