今天的这篇page针对的时leetcode上的349.两个数组的交集写的,小尼首先简单说明一下这道题的要求,给点两个数组nums1和nums2.,返回他们的交集,输出结果中的每个元素一定是唯一的。

首先小尼先说第一种方法,第一种方法就是暴力法,我们先观察这个题目给出的条件,它给出的时两个数组,先说说小尼最开始的思路,小尼最开始的思路是创建第三个数组,然后两层for循环对着两个数组进行遍历,然后把所有相等的数据放入我创建的第三个数组中,在最这个方法进行去重,首先这个思路确实可以,但是最大的问题就是时间复杂度过高,而且不容易写对,所以小尼针对这个方法做了一个改进,那就是利用指针进行去重,小尼接下来拉一下代码

int k = 0;
int a = num1.length;
int b = num2.length;
int []num = new int[num1.length + num2.length];
Arrays.sort(nums1);
Arrays.sort(nums2);
int index1 = 0 , index2 = 0;
while(index1 < a && index2 < b ){if(nums1[index1] == nums2[index2]){if(index1 == 0 || num[index-1] != nums[index1]){num[k++] = nums1[index1];index1++;index2++;}else if(nums1[index1] > nums2[index2]){index2++;}else{index1++;}}return Arrays.copyOfRange(num,0,k);
}

小尼先来解释一下这里面的思路啊,首先我们运用Arrays.sort()的方法对两个数组进行排序,这也是今天小尼学到的新的知识,Arrays.sort()可以对数组进行排序(切记啊,一定是针对数组,如果是字符串,可以通过tocharArray()的方法将字符串转换成数组再去排序),然后我们定义了两个指针index1、index2,我们也创建了一个新的数组以便于我们放入参数,接下来我们定义的条件是index1<a && index2 < b,这个条件其实就是遍历结束的条件,我们在遍历的过程中不要只知道for循环的遍历,while循环的遍历我们同样也需要知道,然后当我们在两个数组中遍历到了相等的值的时候,我们这里的去重操作就是将遍历到的这个数与我们第三个数组的上一个放入的数进行比较,如果已经有了我们就不再放入,如果没有我们就放入,如果两个数组遍历的数值不相等我们就将另一个数组的指针继续往后遍历就行了。最后小尼解释一下最后一句话的意思return Arrays.copyOfRange(num,0,k); 这里的copyOfRange()方法的作用是复制num中的从0到k的左闭右开的区间的值,这里我们的放入的k值因为最后加了个一,所以我们肯定是取不到的,所以我们运用这种方法非常好用。

接下来,小尼给大家介绍第二种方方法,也是今天小尼学习的重点,就是运用哈希表的set方法进行操作,小尼先给大家说明一下set方法运用好处,其实好处就是set内部的add方法具有去重的功能,小尼先拉一下代码:

if(nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) return new int[0];
HashSet<Integer> set1 = new HashSet<>();
HashSet<Integer> set2 = new HashSet<>();
for(int i : nums1){set1.add(i);
}
for(int i : nums2){if(set1.contains(i)){set2.add(i);}
}
int []s = new int[];
int arr = 0;
for(int i : set2){s[arr++] = i;
}
return s;

这里小尼给大家说一下这里面的思想,首先我们先写出没有元素或者数组的个数为0的情况,返回的就是全部为0的一个数组,然后我们创建两个Hashset,我们的第一个set1是用来遍历我们的第一个数组,我们的set2是真正放入我们所需结果的Hashset,我们先遍历将第一个数组中的元素放入我们的set1中,然后遍历第二个数组,判断set1中是否包含nums2中的元素,如果包含就返给set2中,这个里面的去重就是add的源码实现的,所以我们得到的新的set2中就不会有重复的元素。最后我们一定要注意一点就是我们的set2是一个set结构并不是一个数组,但是我们需要返回的是一个数组,所以我们就再走一个for遍历将数据放入新创建的数组中,最后再返回。

小尼给大家再拉一个代码

if(nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) return new int[0];
HashSet<Integer> set1 = new HashSet<>();
HashSet<Integer> set2 = new HashSet<>();
for(int i : nums1){set1.add(i);
}
for(int i : nums2){if(!set1.contains(i)){set1.add(i);}
}
return set2.stream().mapToInt(i->i).toAr;

最后这句话是的作用可以直接将set形式的数据转化为数组,有兴趣的小伙伴可以记住!!!!

My Fourteenth Page - 两个数组的交集 - By Nicolas相关推荐

  1. 两个数组的交集 II

    两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...

  2. 数组-两个数组的交集(两个集合)

    题意: 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5] ...

  3. 9.LeetCode第350题---两个数组的交集2

    一.目的 记录本题的主要目的是想让自己以及大家记住一个Java中的一个函数,可以去除数组中的后面无用的零 方法是Arrays.copyOfRange(res,0,index); 另外需要注意的是本题与 ...

  4. php 两个数组求交集_如何求两个数组的交集

    题目描述 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2] 示例 2: 输入:nums1 = [4,9,5] ...

  5. Leetcode 350. 两个数组的交集 II 解题思路及C++实现

    解题思路: 和349. 两个数组的交集 这道题目很相似,这道题只是在返回的数组中,多了重复的数字,其实相较于349题,350题更简单. 先对两个数组进行排序,然后遍历这两个数组,找到相同的数字之后,就 ...

  6. 350. Intersection of Two Arrays II 两个数组的交集 II

    Title 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = ...

  7. php两个数组找公共部分,PHP开发中如何查找两个数组的交集

    在PHP中,可以使用内置函数array_intersect()来查找两个数组的交集,它可以返回两个数组的公共元素(相交部分).下面我们就来具体介绍一下. array_intersect()函数 基本语 ...

  8. leetcode初级算法4.两个数组的交集 II

    leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] intersect(int[] nums1, in ...

  9. 349. 两个数组的交集 golang

    349. 两个数组的交集 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: num ...

最新文章

  1. 【带你重拾Redis】Redis 哨兵集群实现高可用
  2. linux经典书籍--Linux系统编程
  3. windows reload()
  4. linux的tns 日志,Oracle 11g R2 常用配置与日志的文件位置
  5. python中importlib模块安装_Python中标准模块importlib详解
  6. 20145209 2016-2017-2 《Java程序设计》第9周学习总结
  7. 一个编程指南还有这么多道道儿?
  8. LPWAN——Sigfox实战经验介绍
  9. OpenCore引导配置说明第十五版-基于OpenCore-0.6.8-04-06正式版
  10. 四级信息安全工程师基础知识
  11. 算法题目打卡:Ques20201024
  12. Flux、Mono、Reactor 实战(史上最全)
  13. VScode设置个性化背景
  14. C#基于虹软SDK的人脸识别签到系统
  15. 【机器学习课程-华盛顿大学】:4 聚类和检索 4.4 MoG混合高斯模型和EM估计最大化
  16. python 实现京东滑块验证码登录
  17. 廖雪峰 php教程,获取廖雪峰老师的Python3教程的php脚本
  18. haosou属于搜索引擎的_中国的搜索引擎有哪些
  19. 计算机图形学 学习笔记(五):多边形裁剪(Suther land-Hodgeman),文字裁剪
  20. MQ消息队列的JMS规范和AMQP协议的区别

热门文章

  1. DirectX9 入门(一)
  2. 上海贝尔无线猫破解 电信“我的e家”无线猫路由上网破解全教程
  3. java8 supplier_Java8 Supplier接口和Consumer接口原理解析
  4. Win7蓝屏后显示错误0x0000008E怎么样才能解决?
  5. 列出一些正规scjp证书各城市考点
  6. 【ESP32Arduino+MPU6050 dmp姿态解算】学习笔记 PlatformIO 复制即可使用
  7. 用Turtle绘制斐波那契—————银杏树枝
  8. win7计算机脱机,Win7系统IE脱机状态怎么解除?
  9. 如何制作MacOS系统启动盘
  10. MySQL 打卡时间判断在打卡当天(当天的0点到24点之间)