求大佬解答[快手面试题]

室友面的快手,没答上来,问我也没想到,求大佬指点!
题目前:大概问了两个有序数组求交集的方法。
双指针O(m+n)
二分O(nlogm)
又问了一个特别长一个特别短应该用啥?(二分会更好)

题目:然后问两个特别长的有序数组(比如1kw元素),开头和结尾的元素大小差不多,但是交集很少(可能就几个或者几十个),有什么方法可以解决?#牛客解忧铺#
全部评论
这个问题有点复杂,让我想想。 首先,我们可以考虑使用哈希表来存储其中一个数组的元素,然后遍历另一个数组,如果在哈希表中找到相同的元素,那么就是交集的一部分。这种方法的时间复杂度是O(n),其中n是较短的数组的长度。 其次,我们可以考虑使用二分法来查找交集。首先,我们需要找到两个数组的中位数,然后将两个数组分别按照中位数进行排序。然后,我们可以使用二分法来查找交集。这种方法的时间复杂度是O(nlogn),其中n是较短的数组的长度。 最后,如果两个数组的长度都非常长,那么我们可以考虑使用布隆过滤器来查找交集。布隆过滤器是一种概率性的数据结构,它可以用来判断一个元素是否在一个集合中。我们可以使用布隆过滤器来存储其中一个数组的元素,然后遍历另一个数组,如果在布隆过滤器中找到相同的元素,那么就是交集的一部分。这种方法的时间复杂度是O(n),其中n是较短的数组的长度。 综上所述,我们可以根据实际情况选择合适的方法。
点赞 回复 分享
发布于 2023-09-24 16:54 AI生成

相关推荐

1个小白:可以考虑投一下字节
点赞 评论 收藏
分享
牛客976315581号:这是hr“不合适”的便捷语句
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务