题目
给一个包含n个整数元素的集合a, 一个包含m个整数元素的集合b。
定义magic操作为, 从一个集合中取出一个元素, 放到另一个集合里, 且操作过
后每个集合的平均值都大大于于操作前。
注意以下两点:
1) 不可以把一个集合的元素取空, 这样就没有平均值了
2) 值为x的元素从集合b取出放入集合a, 但集合a中已经有值为x的元素, 则a的
平均值不变(因为集合元素不会重复) , b的平均值可能会改变(因为x被取出
了)
问最多可以进行多少次magic操作?
实现
package com.jpg.coding;
import java.util.Arrays;
import java.util.HashSet;
public class MagicOps {
/*
* 如果集合A和集合B的两个集合的平均值相等,没有办法做magic操作
* 如果集合A和集合B的平均值不相等,则不可能是平均值较小的集合中放数据到较大的集合中
* 所以只能从平均值大的放到平均值小的,而且能拿的值的范围是在两个集合的平均值(a-b)之间
* 这时我们应该拿那个数?我们一定是拿的a-b中较小的数,只有这样才能让平均值大的集合的平均值更大
* 让平均值小的集合的平均更小,这样介于它们平均值之间的数更多,我们能拿的数就更多,能够进行magic
* 操作的次数也就越多
*/
public static int maxOps(int[] arr1, int[] arr2) {
//定义成double是为了能够准确的从平均值大的集合中拿数放到平均值小的集合中
//比如大的集合平均值是96.5,小的集合是37.2,根据上述分析需要从拿的值是
//96.5-37.2,因为数组中的数都是int,所以可以拿的数是96-38,如果是定义成int
//那么取值范围是37-96,我们可以拿的范围是37-96,把37误选了
double sum1 = 0;
for (int i = 0; i