package com.mianshi.test;
import java.util.ArrayList;
import java.util.List;
//需求:给出两个已经排序的数组,求两个数组的交集
//思路:取两个数组的交集,最直接的办法就是建两个for循环,遍历两个数组一个一个进行对照,若等就记录下来。但是这种办法效率比较低,给出的数组
//已经是排好序的所以我们可以使用二分查找,这样效率就会大大提高。还有一个地方,因为事先不知道有多少交集,即新数组的长度不确定,所以我们要
//借助List<Integer>集合。先把交集存在list中,之后再存入数组。如果数组比较大,我们最好遍历小的数组,二分查找大的数组,这样效率也会提高。
//具体代码如下
public class Jiao_Ji_One {
public static void main(String[] args) {
int[] a = {1,3,5,7,9};
int[] b = {2,3,4,5,6,7};
int[] c = jiaoJi(a, b);
for (int i=0; i<c.length; i++) {
System.out.print(c[i] + " ");
}
}
public static int[] jiaoJi(int[] a, int[] b) {
List<Integer> list = new ArrayList<Integer>();
if (a.length < b.length) {
for (int i=0; i<a.length; i++) {
int k = efcz(b, a[i]);
if (k != -999999999) {
list.add(a[i]);
}
}
} else {
for (int i=0; i<b.length; i++) {
int k = efcz(a, b[i]);
if (k != -999999999) {
list.add(b[i]);
}
}
}
int[] c = new int[list.size()];
for (int i=0; i<list.size(); i++) {
c[i] = list.get(i);
}
return c;
}
//二分查找 -999999999是自己定义的,可以根据自己的实际需要定义
public static int efcz(int[] arr, int a) {
if (arr == null) {
return -999999999;
}
int start = 0;
int model = arr.length/2;
int end = arr.length - 1;
while(start <= end) {
int value = arr[model];
if (a > value) {
start = model+1;
} else if (a < value) {
end = model-1;
} else {
return model;
}
model = (start+end)/2;
}
return -999999999;
}
}
输出结果:
3 5 7
更多问题请访问
http://www.exceptionhelp.com/posts/530
分享到:
相关推荐
当`while`循环结束时,`result`向量包含了两个数组的交集,最后返回`result`即可。 这个算法的时间复杂度主要取决于排序的过程,通常为O(n log n),其中n是两个数组中元素总数的最大值。空间复杂度是O(min(m, n)),...
在本压缩包“php-leetcode题解之两个数组的交集.zip”中,主要涉及到的是使用PHP编程语言解决LeetCode算法题目的一个实践案例,特别是关于找出两个数组的交集问题。LeetCode是一个在线平台,提供了大量的编程题目,...
总之,寻找两个数组的交集是JavaScript编程中常见的算法问题,可以通过双重循环、Set操作或`reduce`与`filter`组合等多种方式解决。根据实际需求选择合适的方法,可以有效地提高代码的运行效率和可读性。
例如,如果要查找以下三个数组的交集(公共元素) a = [ 1 3 4 6 8 9 ]; b = [ 3 1 0 8 6 4 ]; c = [ 7 8 1 9 3 4 ];, 您需要首先将它们全部放入一个单元格数组中,即单元格 = {a, b, c}; 然后你可以使用“cell”...
- 函数通过遍历两个数组来寻找交集,并将交集中的元素存储到`$t`数组中。 - 最后,函数还会处理两个数组中未被比较过的剩余部分,并将它们添加到结果数组`$t`中。 - `print_r($t)`输出最终的结果数组。 ##### 2. ...
在实际应用中,这可能用于数据验证、数据分析或寻找两个数据集的交集和并集等场景。 2. **比较数组不同_文本**:文本数组比较主要关注字符串的差异,可能是用于比较两个文本文件的内容、用户输入的文本数据或者查找...
两个指针分别指向两个数组的起始位置,比较当前指针所指元素大小,如果相等,则输出并移动两个指针;如果不相等,则移动较小元素所在数组的指针。这种方法时间复杂度为O(n),空间复杂度为O(1)。 #### 七、求3个数组...
交集操作寻找两个或多个区间中的共同部分。在MATLAB中,我们可以编写自定义函数来完成这个任务。假设我们有两个区间向量`A`和`B`,我们可以通过遍历每个区间,检查是否有重叠部分来找到交集。如果存在重叠,我们需要...
本实例演示如何使用汇编语言寻找两个数组的交集,并将结果存放到数组C中。 16. 三个数的逻辑操作 本实例演示如何使用汇编语言对三个数进行逻辑操作,并将结果存放到S单元中。 17. 字符分类计数 本实例演示如何...
总结来说,"leetcode求交集-Binary-Search-4"涵盖了数组交集的计算和寻找有序数组中位数的算法。这两个问题都涉及到数据结构(如哈希表)和高级搜索技术(如二分查找),是提高编程技能的重要练习。对于压缩包文件...
2. **存储数据**:将两个列表框的数据分别存储到两个数组中,便于后续比较。可以使用易语言的“数组创建”和“数组赋值”命令。 3. **比较数据**:遍历其中一个数组,对每个元素,使用“数组查找”命令在另一个数组...
12. **两数组交集**:找出两个数组的交集,需要两次遍历。首先遍历一个数组,对每个元素查找它在另一个数组中的位置,如果找到则存入结果数组。 13. **数组平均值与计数**:求解数组的平均值需要累加所有元素,然后...
第一题:寻找两个有序数组的交集 这是一道经典的数组处理问题,可以采用双指针法解决。首先,将两个数组合并为一个有序序列,然后用两个指针分别从头开始遍历,若当前指针指向的元素相等,则为交集元素,同时将指针...
这个压缩包文件“2_链表_求la和lb的交集_源码.zip”似乎包含了一个关于如何寻找两个链表(称为la和lb)交集的源代码实现。下面我们将深入探讨链表以及如何找到它们的交集。 首先,让我们理解链表的基本概念。链表...
leetcode双人赛 Golang multi-solutions for leetcode 每道题目均有最优算法。 AC ...两个数组的交集 两个数组的交集 II 翻转对 数组的相对排序 剑指 Offer 40. 最小的k个数 面试题 08.03. 魔术索引
2. **两个数组的交集**:给定两个数组,找出它们的交集。 - **解法一**:使用字典来记录两个数组中元素出现的情况。 - 创建一个空字典`Record`。 - 遍历第一个数组`nums1`,对于每个元素,如果它也在`nums2`中...
2.2 两个数组的交集:集合可以方便地找出两个数组的交集,文档将展示如何利用集合的特性高效地实现这一功能。 2.3 存在重复元素:通过集合,可以快速判断一个数组中是否存在重复元素,这是集合在算法题中的一种常见...
为了提高效率,可以考虑先对两个数组进行排序,然后使用双指针法来寻找有效的对。 #### 优化建议: - **预处理:** 对输入数组进行排序。 - **双指针法:** 使用两个指针分别指向两个数组的起始位置,比较大小并...
本主题将深入探讨如何使用MATLAB中的`intersectCellArrayab`函数来找到两个数值单元数组的交集,这对于数据过滤和清理尤其有用。在这个项目中,我们重点关注的是在单元数组上下文中操作数据的基本概念和`intersect`...