题目要求:
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
示例:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]
解题思路:
使用排序和双指针,依次比较两个数组的值,如果相等则将该值放到数组中,不相等则将较小数的指针向后移动
代码展示:
Java:
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int length1 = nums1.length;
int length2 = nums2.length;
int index=0;
int index1=0;
int index2=0;
int []intersect = new int[Math.min(length1,length2)];
while(index1 < length1 && index2 < length2){
if(nums1[index1]<nums2[index2]){
index1++;
}
else if(nums1[index1]>nums2[index2]){
index2++;
}
else {
intersect[index] = nums1[index1];
index1++;
index2++;
index++;
}
}
return Arrays.copyOfRange(intersect,0,index);
}
}
Arrays.copyOfRange(T[ ] original,int from,int to)
要使用这个方法,首先要import java.util.*;
将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。(左闭右开)