很基础的求两个有序数组的交集和并集

 /**
     * 求解两个有序数组的交集
     * @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;
    }
 

猜你喜欢

转载自blackbeans.iteye.com/blog/1416540