跳转至

数列 - 交并集

如何求 2 个集合的交集

1.每个集合里面是否有重复元素?

思路一:hash,复杂度 O(M+N)

合并 2 个有序数列

合并 2 个有序数列 A 和 B, 其中 A 有足够的空间,也就是把 B 合并进 A 数组

A = [4,5,6]
B = [1,2,7]
合并后
A = [1,2,4,5,6,7]

思路 1:合并 2 个数列,变成 [4,5,6,1,2,7] , 归因排序即可, 递归思路 思路 2:尾部向头部扫描,将大的值放在尾部

//尾部向头部扫描,将大的值放在尾部
    static void mergeSequenceList(int[] a, int aSize , int[] b){

        int len_a = a.length -1;

        int index_a = aSize -1;
        int index_b = b.length -1;

        while (index_a >= 0 && index_b >= 0) {

            //2个指针都有值时
            if (a[index_a] >= 0 && b[index_b] >= 0) {
                if (a[index_a] > b[index_b]) {
                    a[len_a--] = a[index_a--];
                }else{
                    a[len_a--] = b[index_b--];
                }
            }

            //a 无值,b有值 ; 把剩下b放好
            if (index_a < 0 &&  index_b >= 0) {
                while (index_b >= 0) {
                    a[len_a--] = b[index_b--];
                }
            }

            //a 有值,b无值; 把剩下a放好
            if (index_a >=0 &&  index_b < 0) {
                while (index_b >= 0) {

                }
            }
        }
    }

两个序列和之差最小

有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序; 要求:通过交换 a,b 中的元素,使 [序列 a 元素的和] 与 [序列 b 元素的和] 之间的差最小。

例如:

var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];