题目比较简单,散散心吧
这个题竟然是349更简单的版本,可以先看看349题的解法:
Leetcode面试经典150题-349.两个数组的交集-CSDN博客
349会了,这个也就会了
解法都在代码里,不懂就留言或者私信
class Solution {
/**感觉解法和349题差不多吧,我的思想还是先排序:然后挨个比较,不过少了一个判断重复的过程 */
public int[] intersect(int[] nums1, int[] nums2) {
/**先排个序,这样效率更高一些 */
Arrays.sort(nums1);
Arrays.sort(nums2);
/**从两个数组的头开始遍历,curIndex1和curIndex2分别表示数组1和2当前正在遍历的位置*/
int curIndex1 = 0;
int curIndex2 = 0;
/**定义结果数组,先按最大可能长度定义,最大肯定长度就是短数组的长度*/
int[] ans = new int[Math.min(nums1.length, nums2.length)];
/**validLen表示目前结果数组的有效长度 */
int validLen = 0;
while(curIndex1 < nums1.length & curIndex2 < nums2.length) {
/**相等收集答案,两个指针都跳*/
if(nums1[curIndex1] == nums2[curIndex2]) {
ans[validLen ++] = nums1[curIndex1];
curIndex1 ++;
curIndex2 ++;
/**否则谁小谁跳,这样才有可能跟另一个的数相等 */
} else if(nums1[curIndex1] < nums2[curIndex2]) {
curIndex1 ++;
} else {
curIndex2 ++;
}
}
return Arrays.copyOf(ans, validLen);
}
}
还是那句话,放水题,过了就行,不用特别刻意追求最优解