`

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

 
阅读更多

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

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;  
   }  

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics