题目比较简单,散散心吧
解法都在代码里,不懂就留言或者私信
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);}
}
这种题出现就是送你通过的,没必须追求极致,个人觉得