JS-给定A、B两个数组,同时存在于A、B两个数组中的项称为“交集”; 只在A数组中,且不在B数组中的项称为“差集” 编写函数intersection(arr1,arr2)返回两个数组的交集数组 编写函数difference(arr1,arr2)返回两个数组的差集数组
时间: 2023-05-27 08:02:03 浏览: 101
function intersection(arr1, arr2) {
let result = [];
for (let i = 0; i < arr1.length; i++) {
if (arr2.includes(arr1[i])) {
result.push(arr1[i]);
}
}
return result;
}
function difference(arr1, arr2) {
let result = [];
for (let i = 0; i < arr1.length; i++) {
if (!arr2.includes(arr1[i])) {
result.push(arr1[i]);
}
}
return result;
}
// 示例
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [3, 4, 5, 6, 7];
console.log(intersection(arr1, arr2)); // [3, 4, 5]
console.log(difference(arr1, arr2)); // [1, 2]
相关问题
给定两个升序数组A,B,将这两个数组合并为一个升序数组。c语言
可以使用双指针算法来实现两个升序数组的合并。
具体实现如下:
```c
void merge(int* A, int ASize, int* B, int BSize, int* C) {
int i = 0, j = 0, k = 0;
while (i < ASize && j < BSize) {
if (A[i] <= B[j]) {
C[k++] = A[i++];
} else {
C[k++] = B[j++];
}
}
while (i < ASize) {
C[k++] = A[i++];
}
while (j < BSize) {
C[k++] = B[j++];
}
}
```
其中,A、B为待合并的两个升序数组,ASize、BSize分别为其长度,C为合并后的升序数组,需要提前分配好足够的空间。
双指针算法的思路是,分别维护两个指针i、j,表示当前需要比较的元素在A、B数组中的位置,然后比较A[i]和B[j]的大小,将较小的元素加入到合并后的数组C中,并将对应指针向后移动一位。当其中一个数组的指针到达末尾时,将另一个数组中剩余的元素按顺序加入到C中即可。
将给定的两个数组进行求交集
将两个数组进行求交集,就是找出这两个数组中共有的元素。这通常通过编程语言中的数据结构和算法来实现。以下是一个基本的步骤:
1. 创建一个空的结果数组或者集合(如Python中的set,JavaScript中的Set,Java中的HashSet等),用于存放交集。
2. 遍历第一个数组(数组A),对于每个元素,检查它是否也在第二个数组(数组B)中存在。如果存在,就添加到结果集合中。
3. 完成遍历后,结果集合中存储的就是两个数组的交集。
4. 可以选择最后返回这个结果集合,或者转换回列表形式,具体取决于你的需求。
以下是几种常见编程语言的示例代码:
**Python:**
```python
def intersection(arr1, arr2):
return list(set(arr1) & set(arr2))
arr1 = [1, 2, 3, 4, 5]
arr2 = [4, 5, 6, 7, 8]
print(intersection(arr1, arr2)) # 输出: [4, 5]
```
**JavaScript:**
```javascript
function intersect(arr1, arr2) {
const set1 = new Set(arr1);
return Array.from(set1).filter(num => arr2.includes(num));
}
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [4, 5, 6, 7, 8];
console.log(intersect(arr1, arr2)); // 输出: [4, 5]
```
**Java (HashSet):**
```java
import java.util.HashSet;
public List<Integer> intersect(int[] nums1, int[] nums2) {
HashSet<Integer> set1 = new HashSet<>();
for (int num : nums1) {
set1.add(num);
}
return new ArrayList<>(set1.stream().filter(nums2::contains).collect(Collectors.toList()));
}
```
阅读全文