`

两个有序数组的交集和并集

 
阅读更多

两个有序数组的交集和并集。

Intersection of two sorted array. (find the common elements between two sorted arrays)

Follow up:

找出两个有序数组里不同的数字(类似求集合的异或)

这是Facebook的电面题。

/** 
    * 求解两个有序数组的交集 
    * @param a 
    * @param b 
    * @return 
    */  
   public static List<Integer> join(int[] a , int[] b){  
       List<Integer> list = new LinkedList<Integer>();  
       int ai = 0;  
       int bi = 0;  
       while(ai < a.length && bi < b.length){  
           if(a[ai] == b[bi]){  
               //两个相等即交集  
               list.add(a[ai]);  
               ai++;  
               bi++;  
           }  
           else if(a[ai] > b[bi]){  
              //移动小得数组index  
              bi++;  
           }  
           else{  
               //移动小值得数组index  
              ai ++;  
           }  
       }  
  
       return list;  
   }  
  
   /** 
    * 求解两个有序数组的并集 
    * @param a 
    * @param b 
    * @return 
    */  
   public static List<Integer> merge(int[] a , int[] b){  
  
       List<Integer> list = new LinkedList<Integer>();  
       int ai = 0;  
       int bi = 0;  
       while(ai < a.length && bi < b.length){  
           if(a[ai] < b[bi]){  
               list.add(a[ai]);  
               ai++;  
           }  
           else if(a[ai] > b[bi]){  
               list.add(b[bi]);  
               bi++;  
           }  
           else {  
               list.add(a[ai]);  
               ai++;bi++;  
           }  
       }  
  
       //剩余的直接插入到结果集的末尾  
       if(ai < a.length){  
           for(;ai < a.length ; ai++){  
              list.add(a[ai]);  
           }  
       }  
       else if(bi < b.length){  
           for(;bi < b.length ; bi++){  
              list.add(b[bi]);  
           }  
       }  
  
       return list;  
   }  

 

 

分享到:
评论

相关推荐

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

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

    有序顺序表实现集合的各种运算

    1. **交集**:两个有序顺序表的交集是它们共有的元素。可以遍历较短的表,对每个元素在较长的表中进行二分查找,如果找到,则将该元素添加到结果集中。这样,交集操作的时间复杂度可以达到O(m log n),其中m和n分别...

    Python数组并集交集补集代码实例

    并集是指包含所有两个或多个集合中元素的新集合,不考虑重复项。在Python中,我们可以使用`set`对象的`union`方法或`|`运算符来实现。下面展示了两种实现方式: ```python a = ["a", "b", "c", "d"] b = ["b", ...

    交并集和实验报告 数据结构

    为了实现这些功能,设计了两个抽象数据类型:有序表OrderedList和集合Set。有序表的数据对象是整数数组,要求元素按升序排列。其基本操作包括构造空表、销毁表、判断是否为空、获取长度、获取指定位置元素、查找元素...

    Leecode初级算法_数组篇_实例

    例如,你可能会遇到查找数组中的最大值、最小值、特定元素,或者是两个数组的交集、并集等。这些题目对于理解数组的基本特性和操作非常有帮助,同时也训练了程序员的逻辑思维能力。 在Java中,处理数组时可以使用...

    集合运算(数据结构)函数

    - 最后,分别调用`jiao`、`bing`和`cha`函数计算交集、并集和差集,并通过`ListTraverse`函数输出结果。 ### 五、代码分析 该程序使用简单的线性搜索实现了集合的基本运算。尽管效率不是很高,但对于理解集合运算...

    "C语言程序设计大赛”模拟题库

    22. 有序数组交集:双指针遍历,合并两个有序数组。 23. 有序数组并集:去除重复元素,合并两个有序数组。 24. 删除指定范围元素:理解数组的动态调整和内存管理。 25. 单链表去重:遍历链表,使用哈希表辅助,...

    java jsonarray 踢重 去重操作

    在Java中处理JSON数据时,经常需要对JSON数组进行各种操作,其中去重是一个常见的需求。本文将详细介绍如何使用Java对`JSONArray`进行去重操作,并深入探讨背后的原理和技术细节。 ### JSON与Java JSON...

    用有序顺序表实现集合的各种运算

    例如,在交集运算中,需要将两个集合的元素合并成一个集合,并且保持集合的有序性。在差集运算中,需要将两个集合的元素相减,得到一个新的集合。 在实现集合运算时,需要使用到几个重要的函数。这些函数包括: * ...

    Python数据分析应用:检索数组元素.pptx

    除了以上介绍的函数,还有其他相关的数组操作函数,如`itemsize`用于获取数组元素的大小,`intersection1d()`用于找出两个数组的交集,`union1d()`用于计算并集,`setdiff1d()`用于找出在一个数组中但不在另一个数组...

    Python 比较两个数组的元素的异同方法

    当我们需要比较两个列表的元素时,我们可以使用集合(set)数据结构,因为集合提供了计算交集、并集和差集等操作,这些操作非常适合于这种目的。 1. **交集(Intersection)**: 交集表示两个集合共有的元素。在...

    数据结构课程设计之集合运算

    这种方法的时间复杂度为O(m+n),其中m和n分别为两个集合的大小。 3. 差集(Difference):得到一个集合中所有在另一个集合中不存在的元素。同样可以先排序,然后比较两个指针所指向的元素,将只存在于一个集合中的...

    数组集合矩阵习题PPT学习教案.pptx

    - **作业P163**:要求编写一个函数,将两个有序的一维数组`a`和`b`合并成一个新的有序数组`c`。这可以通过上述的并集算法实现,确保合并后的数组保持升序。 5. **程序填空**:给出的代码片段用于初始化一个二维...

    Java实验九:解决问题讲解(排序,数组,添加,删除的应用)

    并集是两个数组的所有元素,包括重复的,也通过遍历和复制数组实现,并在最后进行一次冒泡排序确保并集也是有序的。 7. **条件判断**:使用`if`语句检查两个排序后的数组是否相等,即所有元素都相同。如果相等,则...

    Swift从入门到精通视频教程下载第6章 Swift集合类型——数组和字典.zip

    本章“Swift集合类型——数组和字典”深入讲解了这两个关键的内置数据结构,帮助开发者掌握如何有效地存储和管理数据。在iOS应用开发中,无论是存储用户信息、应用程序设置还是游戏得分,数组和字典都是不可或缺的...

    北师大版高一数学必修一集合测试题1.doc

    因此,选项 A, B 和 C 表示的都是解集,而选项 D 是一个有序数组,不是集合,所以答案是 D。 - (2) 这个问题没有提供具体选项,但通常涉及到集合元素的性质,比如空集的定义、集合包含关系等。 - (3) 同上,这个...

    调用算法简化数组编程_washr3x_treatedsw5_algorithm_

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

    集合类的菜单界面

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

    离散数学实验

    输入方法读取用户提供的集合元素,显示方法用于打印集合内容,交集、并集和差集方法分别实现了对应的集合运算,而笛卡尔积方法则负责生成并打印所有的有序对。 通过实际操作,学生不仅能掌握集合运算的理论知识,还...

    基于顶点的复杂多边形求交算法的实现

    5. **结果合并**:根据边-边测试、顶点测试和孔洞测试的结果,我们可以计算出两个多边形的交集、并集或差集。交集是两个多边形共享的部分,并集是它们的组合,差集是一一个多边形减去另一个。 在实现过程中,代码...

Global site tag (gtag.js) - Google Analytics