Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
- 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
- 示例 1:
- 输入: nums1 = [1,2,2,1], nums2 = [2,2]
- 输出: [2,2]
- 示例 2:
- 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
- 输出: [4,9]
- 提示:
1 <= nums1.length, nums2.length <= 10000 <= nums1[i], nums2[i] <= 1000
二、思路分析:
- 这个题目比两个数组的交集 I 多了一个需要输出重复项
- 所以这题就不需要去重了,但是要考虑下重复项的个数,以最小的个数为准,比如:
nums1=[1,2,2,2,3]和nums2=[1,2,2,2,2,2,2,3],重复项相同数字有多个,以最少的为准,输出[1,2,2,2,3] - 遍历两个数组,如果出现第二个数组的项等于第二个数组的项,截取掉第二个数组的项,添加到定义好的变量中
splice方法改变原数组的长度,所以截取完后,遍历的参数值需要-1- 重复项需要一一对应,第一个数组中的项在第二个数组中找到一个相等值之后,就不需要再往后找了,所以需要添加
break退出当前循环
三、AC 代码:
function intersect(nums1: number[], nums2: number[]): number[] {
let resultArr: Array<number> = [];
for(let i = 0; i < nums1.length; i++){
for(let j = 0; j < nums2.length; j++){
if(nums1[i] === nums2[j]){
resultArr.push(nums2.splice(j, 1)[0]);
j--
break;
}
}
}
return resultArr
};难度