读书人

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

发布时间: 2012-06-30 17:20:12 作者: rapoo

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

?

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

读书人网 >互联网

热点推荐