`

查找两个有序数组的交集(C++实现)

 
阅读更多
// Type your C++ code and click the "Run Code" button!
// Your code output will be shown on the left.
// Click on the "Show input" button to enter input data to be read (from stdin).

#include <iostream>
#include <vector>
using namespace std;

// find the intersection of two array
vector<int> intersect(vector<int> a, vector<int> b) {
    vector<int> intersection;
    vector<int>::iterator ai = a.begin();
    vector<int>::iterator bi = b.begin();
    while(ai != a.end() && bi != b.end()) {
        if(*ai > *bi) {
            bi ++;
        } else if(*ai < *bi) {
            ai ++;
        } else {
            intersection.push_back(*ai);
            ai ++;
            bi ++;
        }
    }
    return intersection;
}

void print_vector(vector<int> vet) {
    for(vector<int>::iterator iter = vet.begin(); iter != vet.end(); iter++) {
        cout<<*iter<<" ";
    }
    cout<<endl;
}

int main() {
    // test data
    vector<int> alist;
    vector<int> blist;
    for(int i = 0; i < 100; i+=3) alist.push_back(i);
    for(int i = 0; i < 100; i+=2) blist.push_back(i);
    cout<<"alist: "<<endl;
    print_vector(alist);
    cout<<"blist: "<<endl;
    print_vector(blist);
    cout<<"intersection: "<<endl;
    print_vector(intersect(alist, blist));
    
    return 0;
}

 

欢迎关注微信公众号——计算机视觉:

 

分享到:
评论

相关推荐

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

    在给定的编程问题中,目标是找到两个整数数组`nums1`和`nums2`的交集。这个问题可以通过双指针法来解决,这是一种常见的处理数组问题的方法,尤其适用于处理有序数组或部分有序数组的情况。以下是详细的解题过程: ...

    一个 c c++写的归并排序算法

    这里似乎不是典型的归并排序实现,而是更像一种查找两个有序列表交集的操作。 5. **返回值**:最后返回`dwResultNum`,即结果数组中的元素数量。 ### 总结 综上所述,尽管提供的代码片段并没有直接展示归并排序的...

    C++二分查找在搜索引擎多文档求交的应用分析

    上述代码提供了两个二分查找的实现,`search2` 和 `search3`。两者的主要区别在于处理边界条件的方式。`search2` 在初始化时将右边界设置为 `n - 1`,而在比较过程中可能会将右边界减一,导致丢失最后一个元素;而 `...

    (完整版)百度2012校园招聘C-C++笔试题.doc

    4. 合并有序数组:第四题中,要求在O(1)的空间复杂度下合并两个有序子数组。这可以通过双指针法解决,不额外开辟空间,直接在原数组上进行操作。初始化两个指针分别指向两个子数组的起始位置,比较两个指针所指元素...

    Algorithms in C++, Parts 1-4 (code)

    二分查找是在有序数组中查找特定元素的高效算法。其基本思想是通过将查找区间分成两半来逐步缩小查找范围。 - **非递归版本**: - 通过不断更新查找区间的左边界 `l` 和右边界 `r` 来进行查找。 - 直到找到目标...

    C++集合类 (2).docx

    在C++编程中,集合是一种数据结构,它包含一组具有特定特性的元素。在这个文档中,我们关注的是自定义的集合类`...此外,还需要实现集合的并集和交集操作,这通常涉及遍历两个集合并根据特定条件添加元素到结果集合中。

    JIHE.rar_交集 并集_数据结构 界面

    例如,对于两个有序表A和B,要找到它们的交集,我们只需从较小的表开始,逐个比较元素,如果元素同时存在于两个表中,就将其添加到结果集中。对于并集,我们可以简单地将两个表连接起来,然后去重,保持原有的排序...

    顺序表(包含合并,排序,交集,插入删除)

    5. 计算交集:两个有序顺序表的交集,可以通过两个指针同步遍历两个表,比较元素并记录相同的元素。 C++实现顺序表: 在C++中,可以使用数组或`std::vector`容器来实现顺序表。`std::vector`提供了动态扩容的功能,...

    集合类的菜单界面

    4. **交集**:交集操作需要遍历两个集合,将存在于两个集合中的元素添加到结果集合中。 5. **并集**:并集操作则将两个集合的所有元素都添加到结果集合中,但需去除重复元素。 6. **差集**:差集操作返回只存在于一...

    调用算法简化数组编程_washr3x_treatedsw5_algorithm_

    7. **集合操作**:`unique()`函数可以去除数组中的重复元素,`set_union()`、`set_intersection()`和`set_difference()`分别用于计算两个数组的并集、交集和差集。 在学习`&lt;algorithm&gt;`库时,重要的是要理解每个...

    百度2012实习生校园招聘笔试题

    题目描述的是归并排序的一个变体,要求在原地合并两个有序数组。常规的归并排序需要额外的空间,但这里要求空间复杂度为O(1)。这可以通过双指针法实现,从两个子数组的末尾开始比较,将较大的元素放入结果数组,...

    每天学点C++(C++实例教程:教程+源码)常用集合算法.zip

    - **交集**:找出两个集合共有的元素,形成新的集合。 - **差集**:在一个集合中去除另一个集合的元素,得到的新集合只包含第一个集合独有的元素。 - **集合的幂集**:所有可能子集构成的集合,包括空集和自身。 ...

    西南交通大学数据结构第一次实验报告

    在本实验中,顺序表的交集算法首先对两个表进行合并排序,然后通过两个指针遍历排序后的表,将相同的元素添加到新的顺序表中,避免重复。时间复杂度为O(nlogn + mlogm + m + n),其中n和m分别为两个线性表的长度。 ...

    数据结构与算法分析+C+++描述+第三版》答案

    - **归并排序**:同样采用分治策略,将数组分成若干小数组再合并成有序数组。 #### 八、不相交集 **章节概述**:不相交集(Disjoint Set)也称为并查集,是一种用于处理元素集合划分问题的数据结构。 - **并查集...

    c++ stl.docx

    - **equal_range()**: 返回一个包含两个迭代器的对,分别指向与给定值相等的第一个元素和最后一个元素之后的位置。 - **get_allocator()**: 返回一个用于管理集合内存分配的对象。 - **key_comp()** 和 **value_comp...

    面向对象技术C++平时作业样本.doc

    8. **集合运算**:集合运算的方法通过遍历两个集合,利用已有的插入、删除等基础操作实现。 在实际应用中,IntSet 类可以广泛用于数据处理和算法实现,如数据过滤、集合分析等场景。通过面向对象的设计,我们可以更...

    STL入门指导c++

    5. **合并算法**:`merge`合并两个有序序列。 6. **集合操作**:`set_union`、`set_intersection`、`set_difference`和`set_symmetric_difference`分别求并集、交集、差集和对称差集。 四、STL函数对象 函数对象,...

Global site tag (gtag.js) - Google Analytics