以下哪种方法更有效



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

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

时间复杂度 - O(nlogn(

空间复杂度 - O(1(

方法2:-保留字典中的所有元素并执行该过程

时间复杂度 - O(n(

空间复杂度 - O(n(


现在,在上述 2 种方法中,哪一种最有效,我将在这种情况下比较效率、时间(或(空间,因为这两种方法都不同

  1. 我在上面留下了我的评论以供参考。
  2. 太仓促了。 您确实允许 O(nlogn( 时间进行方法 1 排序(我现在认为我明白了?(,这是公平的(抱歉;-(。
  3. 接下来会发生什么? 如果必须再次使用输入数组,则需要一个排序副本(排序不会就地(,这会增加 O(n( 空间要求。
  4. 方法 1 的"迭代"部分也需要 ~O(n( 时间。
  5. 但是在方法 2 中加载字典也是 ~O(n( 时间(大概是丢弃的数据结构?(和字典访问 - 尽管 ~O(1( - 慢(比数组索引(。

底线:如果O符号可以识别"压倒性成本"(相比之下,其他成本可以忽略不计(,那么O符号是有帮助的,但是如果没有用例的提示(典型和边界,数据数量和可用系统资源等细节(,像这样的问题(寻求"广义理想"答案(不能从中受益。

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

最后,在没有明确的性能赢家的情况下,总是有"代码可读性"来帮助决定;-(

最新更新