交換兩個陣列值使兩個陣列之差最小

2021-06-20 16:51:58 字數 726 閱讀 8955

有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;

要求:通過交換a,b 中的元素,使[序列a 元素的和]與[序列b 元素的和]之間的差最小。

例如:var a=[100,99,98,1,2, 3];

var b=[1, 2, 3, 4,5,40];

假設序列a,b中元素的和為sum_a和sum_b。假設aa和bb分別為序列a,b中的元素,則交換aa,bb後序列的和變為sum_a-aa+bb,sum_b+aa-bb;兩序列的差為(sum_a-aa+bb)-(sum_b+aa-bb)=sum_a-sum_b-2*(aa-bb);

所以可以掃瞄序列a,b中的元素,找到使abs(sum_a-sum_b-2*(aa-bb))最小的兩個元素進行交換,重複此過程,直至兩序列的差無法減小。

bool swap2balance(int *pa, int *pb, int n)

int diff=suma-sumb;

while (diff!=0)

}if (bestchange==0) //差不能再縮小

return false;

int temp=pa[besti];

pa[besti]=pb[bestj];

pb[bestj]=temp;

suma-=bestchange;

sumb+=bestchange;

diff=suma-sumb;

}return true;

}

交換兩個陣列使兩個陣列和的差最小

有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...

交換兩個陣列使兩個陣列和的差最小

有兩個陣列a,b,大小都為n,陣列元素的值任意整形數,無序 要求 通過交換a,b中的元素,使 陣列a元素的和 與 陣列b元素的和 之間的差最小。求解思路 當前陣列a和陣列b的和之差為 a sum a sum b a的第i個元素和b的第j個元素交換後,a和b的和之差為 a sum a a i b j ...

交換兩個陣列的元素,使兩個陣列和的差最小

前些時候面試碰到的題目 有兩個有序正整數陣列array1 n array2 m 通過交換兩陣列的元素,使兩個陣列的和最接近。基本演算法思路 每次從array1 array2選擇出一對能使交換後得array1和與array2和的差值變小的組合array1 i array2 j 作交換 直到對任意組合a...