解题思路
查找相同的元素,其中有一个难点就是会出重复,每次必须要排除掉被重复记录的数组。
想到了归并排序的方法,设置两个工作指针,不相同的时候移动数字小的那个数组的指针。
排序算法可以直接调封装好的快速排序,代码不麻烦,且时间复杂度可以接收,遇到数字数组问题,不妨想想看排序后可以有什么巧妙的解决办法
代码
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
//必须先排序
Arrays.sort(nums1);
Arrays.sort(nums2);
int i=0,j=0,k=0;
/**
* 类似归并排序的双工作指针
* 1、当两者不同时,小的那个数组前进
* 2、两者相同的时候,两者同时前进,且记录当前数字
* 3、当一数组遍历完成时候推出循环(难点,有一个数组遍历完便可以结束循环)
*/
while(i<nums1.length && j<nums2.length) {
if(nums1[i]<nums2[j]) {
i++;
}else if(nums1[i]>nums2[j]) {
j++;
}else {
nums1[k++]=nums1[i++];
j++;
}
}
return Arrays.copyOfRange(nums1, 0, k);
}
}