- 论坛徽章:
- 0
|
# coding=gb2312
# 有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
# 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
def FindTargetItem(diff,lst):
for item in lst:
if diff >= item:
return lst.index(item)
else:
return -1
def Process(lstA,lstB):
sumA = sum(lstA)
sumB = sum(lstB)
lstA.sort()
lstB.sort()
if sumA == sumB:
return
elif sumA > sumB:
diff = sumA - sumB
while diff >= 0:
targetIndex = FindTargetItem(diff,lstA)
if targetIndex == -1:
return
else:
lstB.append(lstA.pop(targetIndex))
sumA = sum(lstA)
sumB = sum(lstB)
diff = sumA - sumB
else:
diff = sumB - sumA
while diff >= 0:
targetIndex = FindTargetItem(diff,lstB)
if targetIndex == -1:
return
else:
lstA.append(lstB.pop(targetIndex))
sumA = sum(lstA)
sumB = sum(lstB)
diff = sumB - sumA
return |
|