`
fenglingxuewqk
  • 浏览: 83800 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

2个数组的交集算法

阅读更多

今天在做项目的时候要用到2个数据的交集算法,就去研究了一下。

原本考虑的情况是2个数组都是升序且无重复元素,所以就用了以下算法:

public static List isRepeat(int list1[], int list2[]) {
	if (list1 != null && list2 != null) {
		int length1 = list1.length;
		int length2 = list2.length;
		List rep = new ArrayList();
		int i = 0, j = 0;
   		while (i < length1 && j < length2) {
    			if (list1[i] == list2[j]) {
     				rep.add(new Integer(list1[i]));
     				i++;
     				j++;
    			} else if (list1[i] > list2[j]) {
     				j++;
    			} else {
    				i++;
    			}
   		}return rep;
	}
	return null;
}

 

后来发现数据在数据库中是以varchar形式存在,无法以order by正确排序,心想如果自己先排序再用以上算法有点不值。于是乎继续研究,发现用List.retianAll()方法就可以实现,代码如下:

List list = new ArrayList(Arrays.asList(a));
list.retainAll(Arrays.asList(b));

 

这个方法唯一的遗憾就是,如果数组中存在相同的元素,该方法不会过滤掉。

 

分享到:
评论
2 楼 fenglingxuewqk 2010-10-13  
ah_fu 写道
你的算法是错的!
关键就在else{i++;}的部分。
当左边总是小于右边的时候,连续两次i++会导致跳过一个元素不比较

恩 是的 应该把else{i++;}去掉。另外我又仔细看了下 发现这个算法还是有其他BUG的。。。
1 楼 ah_fu 2010-09-27  
你的算法是错的!
关键就在else{i++;}的部分。
当左边总是小于右边的时候,连续两次i++会导致跳过一个元素不比较

相关推荐

    java 二个数组的交集,算法

    在Java编程中,处理两个数组的交集是常见...总结,处理Java中的两个数组交集可以通过多种方式实现,包括`HashSet`、流API、双重循环以及并查集等。理解这些方法的原理和适用场景,有助于我们在实际编程中做出最佳选择。

    求两个数组的交集

    接下来,我们再遍历第二个数组B,对于每个元素,如果它在哈希表中存在并且计数不为零,那么就将其添加到结果集合中,并将计数减一。这种方法的时间复杂度为O(n),因为每个元素只被访问一次。 具体步骤如下: 1. ...

    两个有序数组求交集,C++

    - `arr2`: 第二个有序数组 - `n2`: `arr2`的长度 - `Inter`: 存储交集结果的数组 - **核心逻辑**: - 使用三个指针`i`、`j`和`k`分别指向`arr1`、`arr2`和`Inter`。 - 在循环中比较`arr1[i]`和`arr2[j]`的值:...

    两个数组交集(双指针)1

    这个算法的时间复杂度主要取决于排序的过程,通常为O(n log n),其中n是两个数组中元素总数的最大值。空间复杂度是O(min(m, n)),m和n分别是两个数组的长度,因为我们只存储交集元素,所以结果向量的大小不会超过较...

    JavaScript获取多个数组的交集

    以上就是JavaScript获取多个数组交集的常见方法。在实际开发中,我们需要根据具体情况选择最适合的方案,平衡性能和代码简洁性。同时,理解这些基本操作也有助于我们更好地掌握JavaScript数组处理的技巧。在阅读类似...

    两个数组的交集(python+set)1

    解释:两个数组的交集是[2],因为2是唯一同时存在于两个数组中的元素。 示例2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:9和4是同时存在于nums1和nums2中的元素,因此交集是[9,4]。 此...

    求两个数组的交集、并集和差集算法分析与实现

    从数组1的尚未比较的元素中拿出第一个元素array1(i),用array1(i)与array2(j)进行比较(其中j&gt;i且j&lt;array2的长度),可能出现下面两种情况, 1. 数组2中找到了一个与array1(i)相等的元素,则将array2(j)与array2(i)...

    js代码-(算法)两个数组交集

    通过阅读和学习这段代码,你可以更好地理解如何在JavaScript中处理数组交集问题。而`README.txt`文件可能提供了一些关于代码使用、测试或优化的说明,可以帮助你更好地运用这些方法。 总之,寻找两个数组的交集是...

    Python3实现计算两个数组的交集算法示例

    本篇文章将详细解释两种不同的Python3实现计算两个数组交集的算法,并探讨涉及的数组操作技巧。 首先,我们来看方案一,这种方法巧妙地运用了`collections.Counter`类和位运算`&`。`Counter`是一个可哈希对象的频率...

    Java 实例 - 计算两个数组交集源代码-详细教程.zip

    在Java中,有两种主要方法来计算数组交集:使用HashSet或双层循环。我们先来看第一种方法: 1. 使用HashSet: HashSet是一个不包含重复元素的集合,它没有重复元素,也没有特定的顺序。通过将一个数组的所有元素...

    Python实现求两个数组交集的方法示例

    本文实例讲述了Python实现求两个数组交集的方法。分享给大家供大家参考,具体如下: 一、题目 给定两个数组,编写一个函数来计算它们的交集。 例1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 例2: ...

    JavaScript获取两个数组交集的方法

    本文介绍的获取数组交集的方法有两个前提条件:首先,传入的两个数组必须是已经排过序的。其次,这个方法的时间复杂度是O(n),其中n是两个数组中较短的那个的长度。 具体实现方法如下: ```javascript function ...

    Intersector针对不同内容类型高度优化的数组交集

    "Intersector" 是一个专门针对这种情况的高度优化库,它提供了高效计算数组交集的功能,适用于各种不同的内容类型,包括基本类型和复杂对象。本文将深入探讨Intersector的工作原理、优势以及如何在实际项目中应用。 ...

    php-leetcode题解之两个数组的交集.zip

    综上所述,这个压缩包提供了关于使用PHP解决LeetCode中数组交集问题的实例,是学习和实践算法的好资源。通过深入理解并实践这些代码,可以增强对PHP语言和算法的理解,对于提升编程技能和解决问题的能力非常有帮助。

    JavaScript中数组的一些算法和技巧总结

    - 两数组交集、并集、差集:使用`filter()`和`includes()`实现。 - 快速排序:可以使用数组的`sort()`配合自定义比较函数实现。 通过熟练掌握以上知识,开发者能够更加灵活地处理JavaScript中的数组,提高代码...

    c语言基础-c语言编程基础之数组操作示例-两个数组的交集.zip

    本教程将深入探讨C语言中的数组操作,特别是如何找出两个数组的交集。首先,让我们理解数组的基本概念。 数组是由相同类型的数据元素构成的集合,这些元素在内存中是连续存储的。每个元素都有一个唯一的索引,从0...

    java-leetcode面试题解哈希表第350题两个数组的交集II-题解.zip

    标题中的“java-leetcode面试题解哈希表第350题两个数组的交集II-题解.zip”指的是一个关于Java编程语言的LeetCode面试题解析,具体是第350题,题目要求解决“两个数组的交集II”的问题,而解题方法主要涉及哈希表的...

Global site tag (gtag.js) - Google Analytics