1.7 KiB
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];