数列 - 交并集¶
如何求 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];