1 回答

TA贡献1820条经验 获得超9个赞
第一个解决方案
好吧,你必须考虑一件事,尤其是在第一个解决方案中,split, slice and indexOf
方法都有自己的时间复杂度。
假设你在杂志上有 m 封信。当你将它拆分成数组时,你已经在那里使用了 O(m) 时间复杂度(当然还有 O(m) 空间复杂度,因为你将它全部存储在一个大小为 m 的新数组中)。
现在您输入一个将运行 n 次的 for 循环(其中 n 是 ransomNote 中的字母数)。所以就在那时和那里你有 O(m * n) 时间复杂度。indexOf 操作也将被调用 n 次,但需要注意的是每次调用时它都会运行 O(m)。您可以在那里看到您开始增加时间复杂度的速度有多快。
我认为它类似于 O(3 * m * n^2) ,它四舍五入到O(m * n^n)时间复杂度。我强烈建议不要indexOf
多次调用,只需调用一次并将其结果存储在某处。你要么有一个索引,要么-1
意味着找不到它。
第二种解决方案
好多了。在这里你填充了一个哈希映射(所以使用了一些额外的内存,但考虑到你也首先使用了一个拆分并存储它,它应该大致相同)。
然后你只需简单地循环遍历 randomNote 并在 hashMap 中找到一个字母。在地图中查找一个字母的时间复杂度为 O(1),因此它对于此类算法非常有用。
我认为最终复杂度为O(n * m)比第一个要好得多。
希望我对你有意义。如果您愿意,我们可以在您回复后的评论中更深入地进行空间分析
添加回答
举报