0
点赞
收藏
分享

微信扫一扫

Leetcode面试经典150题-350.两个数组的交集II

whiteMu 2024-09-19 阅读 13

题目比较简单,散散心吧

这个题竟然是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);
    }
}

还是那句话,放水题,过了就行,不用特别刻意追求最优解 

举报

相关推荐

0 条评论