程序算法编程:求两个数组的交

1.给出的两个数组,求数组的交:

例如:{1,2,2,1}和{2,4},输出{2}。

方法1:数组遍历

用数组1中的值分别遍历数组2中的值,相同的值存入集合。

java代码如下:

    public int[] intersection(int[] nums1, int[] nums2) {
        // Write your code here
        int resultnum = 0;
        int k = 0;
         Set<Integer> result=new HashSet<Integer>();
         for (int i = 0;i< nums1.length;i++){
             for(int j=0;j< nums2.length;j++){
                 	if(nums1[i]==nums2[j]){
        		      result.add(nums1[i]);
        	      }
             }
         }
        resultnum=result.size();
        int[] resultreturn=new int[resultnum];
      Iterator<Integer> it=result.iterator();
        while(it.hasNext()){
        	resultreturn[k++]=(it.next()).intValue();
        
        }
		return resultreturn;
    }
这是最简单的一种方法,但是会存在TLE问题,即超时时间限制,代码运行效率比较低,时间复杂度是O(n^2)。

方法2:哈希表

        Set<Integer> re = new HashSet<Integer>();
    	HashMap<Integer, Integer> result = new HashMap<Integer,Integer>();
    	for(int i=0;i<nums1.length;i++){
    		result.put(nums1[i], nums1[i]);
    	}
    	for(int j=0;j<nums2.length;j++){
    		if(result.get(nums2[j])!=null){ //the value is already in nums1
    			re.add(nums2[j]);
    		}  
    	}

通过将两个数组映射到哈希表中,这样可以在遍历一次数组过程中检测出交集,时间复杂度是O(n),效果得到了优化。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值