java快速判断大数量的交集_打基础之LeetCode算法题第70篇:求两个数组的交集问题...

24fc13ab9985784ad8232958822e93cb.png

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来对吧。

我计划每题给出两种语言的解决方案,一种静态语言,一种动态语言。

我选择C语言,Python和Java作为实现语言,由于篇幅有限,其他语言的实现有兴趣的朋友请自己尝试。

LeetCode 349. 两个数组的交集(Intersection of Two Arrays)

问题描述:

给定两个数组,编写一个函数来计算它们的交集

注:

  1. 输出结果中的每个元素一定是唯一的。
  2. 我们可以不考虑输出结果的顺序。

示例:

f3aa48335a1a43716df91b05975cb6ee.png

C语言实现:

这个问题很简单,解决方法有很多,你可以对nums1构建一个hash表,通过查表来解决。

我的解题办法是首先对两个数组分别排序,我们调用库中的qsort函数来完成排序,排序完了以后同时遍历nums1和nums2,考虑以下三种情况:

  1. 如果nums1[i] > nums2[j],j不断的加1一直到 nums1[i] <= nums2[j];
  2. 如果nums1[i] < nums2[j], i不断的加1一直到 nums1[i] >= nums2[j];
  3. 如果nums1[i] == nums2[j],添加到返回数组中,然后i和j都加1。

如果我们用n来表示nums1和nums2的最大长度,那么遍历的时间复杂度就是O(n) 加上快速排序的时间复杂度O(nlogn)。合计算法复杂度是O(nlogn)。

代码如下:

c9287fdb6eb5fc3aeca2851b53915b3e.png
31d487563f8ed70b84fe6cf4c1f6cb73.png

python语言的实现:

对于python 来说解决这个问题再简单不过了。

代码如下:

96335e8b4d85811466269cd5336df44d.png
9b768b94257fd3daeff6912aac82beab.png

Java语言的实现:

Java的实现和C语言的实现相同,不再撰述。

代码如下:

7c44f8af92dc44f7635a95c1cf327465.png
d437d41033ae3df5849fe0eacb18e85d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值