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

题目比较简单,散散心吧

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值