Files
Learn-Algorithms/9 Algorithms Job Interview/5.3 数列-交并集.md
T
2021-09-20 13:28:54 +08:00

1.7 KiB

数列-交并集

如何求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];