LeetCode350. Intersection of Two Arrays II

这个题自己做到最后总是时间超限,分析应该是代码中的一个很多余的while循环浪费了时间,看了一下别人的解法稍微改动了结构,然后就通过了。

思路是先用java中sort排序,两个数组都从小到大,然后两个数组都从小到大逐位比较即可,注意因为已经排序的关系,不会倒回去比较,只会一直往数值大的方向比较,具体看代码即可理解。时间复杂度是sort函数的(n*logn)。一方数组的长度很小的话,可以很快算完,所以比较快。

源码:

import java.util.*;
import java.util.Arrays;
class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        
        int len1=nums1.length;
        int len2=nums2.length;
        
        ArrayList result=new ArrayList();
       
        int i=0,j=0;
        while(i<len1&&j<len2){
     
            if(nums1[i]==nums2[j]){
                result.add(nums2[j]);
                i++;
                j++;
            }
            else if(nums1[i]<nums2[j])
                i++;
            else
                j++;
        }
        
        int len3=result.size();
        int []a=new int[len3];
        int q=0;
        for(Object k:result){
            int p=(int)k;
            a[q]=p;
            q++;
        }
         return a;
    }
}

while循环里应该是很简单的分支结构,我一开始没想清,在里面还加了一个多余的while循环,当nums1[i]<nums2[j]是一直i++,其实完全可以用if语句处理的。这个小的点今后注意。

另外一开始写的版本是函数调用的,觉得代码很冗余,不用分开考虑两个数组的长短问题,放到一起一个while循环就可以解决。

【本题解法持续整理中........】

参考博客:

https://blog.csdn.net/xushiyu1996818/article/details/81416281

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值