题目比较简单,散散心吧
解法都在代码里,不懂就留言或者私信
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
/**先排个序 */
Arrays.sort(nums1);
Arrays.sort(nums2);
int curIndex1 = 0;
int curIndex2 = 0;
/**先把数组的大小设置为最大可能,最大可能就是跟小数组等长 */
int[] ans = new int[Math.min(nums1.length, nums2.length)];
/**记录答案的有效长度 */
int validLen = 0;
while(curIndex1 < nums1.length && curIndex2 < nums2.length) {
/**如果和之前的数一样就跳下一个,nums1和nums2一样的逻辑 */
while(curIndex1 < nums1.length && curIndex1 != 0 && nums1[curIndex1] == nums1[curIndex1 - 1]) {
curIndex1 ++;
}
if(curIndex2 < nums2.length && curIndex2 != 0 && nums2[curIndex2] == nums2[curIndex2 - 1]) {
curIndex2 ++;
}
/**任何一个到达最后了,没必要继续了,不会再有相等的数了 */
if(curIndex1 == nums1.length || curIndex2 == nums2.length) {
break;
}
/**如果相等,记录交集,两个都跳下一个 */
if(nums1[curIndex1] == nums2[curIndex2]) {
ans[validLen++] = nums1[curIndex1];
curIndex1 ++;
curIndex2 ++;
/**else if和else里是同一个意思,谁小谁跳下一个,因为下个数更大才有可能和另外一个相等 */
} else if(nums1[curIndex1] > nums2[curIndex2]) {
curIndex2 ++;
} else {
curIndex1 ++;
}
}
/**拷贝出有效的长度 */
return Arrays.copyOf(ans, validLen);
}
}
这种题出现就是送你通过的,没必须追求极致,个人觉得