以下哪种方法更有效

时间:2019-09-30 12:54:39

标签: arrays data-structures time-complexity big-o space-complexity

问题陈述:-给定一个整数数组和一个整数k,请打印该数组中所有总和为k的对

方法1:- 对数组进行排序,并保持两个指针的高低,开始迭代...

时间复杂度-O(nlogn)

空间复杂度-O(1)

方法2:- 将所有元素保留在字典中并进行处理

时间复杂度-O(n)

空间复杂度-O(n)


现在,在以上两种方法中,哪一种是最有效的,在这种情况下,由于两种方法都不同,因此我将在哪种基础上比较效率,时间(或)空间

1 个答案:

答案 0 :(得分:0)

  1. 我已在上面留了我的评论以供参考。
  2. 这很仓促。您确实将O(nlogn)时间用于方法1排序(我现在认为我理解吗?),这很公平(很抱歉;-)。
  3. 接下来会发生什么?如果必须再次使用输入数组,则需要一个排序后的副本(排序不会就位),这会增加O(n)的空间要求。
  4. 方法1的“迭代”部分也花费〜O(n)时间。
  5. 但是在方法2中加载字典也需要大约O(n)时间(大概是一个废弃的数据结构?)和字典访问-尽管〜O(1)-速度较慢(比数组索引)。

底线:如果O标记可以识别“超支成本”(通过比较使其他成本可以忽略不计),但没有用例的提示(典型和边界,数据量和可用系统资源等详细信息等),则很有用。 ),这样的问题(寻求“广义理想”答案)无法从中受益。

通常,一些简单的概念验证代码和对代表性数据的性能测试可以使“正确的选择”变得显而易见(比推测性理论更容易,通常更正确)。

最后,在没有明确的性能赢家的情况下,总会有“代码可读性”来帮助做出决定;-)