通过交换两个数组的元素,使数组元素和之差最小

前几天看到一个算法题:有两个数组A,B,大小都为 n,数组元素的值任意,且无序,要求通过交换A和B中的元素,使得数组A中元素的和与数组B中元素的和之间的差最小。
我的想法就是:将两个数组合并为一个数组,并排序,然后再平分,每次取一头一尾两个,轮流放到A、B两个数组中。下面我把我的代码放上来

// 定义两个数组
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@5, @11, @32, @74, @36, nil];
NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@26, @17, @8, @57, @10, nil];

// 定义一个BOOL值, 用来判断数组的奇偶, 如果为偶数,则为YES, 反之, 为NO
BOOL isEvenNumber = (array1.count % 2) ? NO : YES;

// 把两个数组整合到一起
NSMutableArray *array = [NSMutableArray arrayWithArray:array1];
[array addObjectsFromArray:array2];

// 对数组进行排序(这个方法返回的结果是从小到大)
NSArray *sortArray = [array sortedArrayUsingSelector:@selector(compare:)];

// 清空两个数组
[array1 removeAllObjects];
[array2 removeAllObjects];

分发数组元素

if (isEvenNumber) {
    // 偶数
    for (NSInteger i = 0; i<(sortArray.count / 2); i++) {

        [array1 addObject:sortArray[i]];
        [array1 addObject:sortArray[sortArray.count - i -1]];

        [array2 addObject:sortArray[i + 1]];
        [array2 addObject:sortArray[sortArray.count - i - 2]];

        i++;
    }

} else {
    // 奇数
    [array1 addObject:sortArray[sortArray.count / 2 - 1]];
    [array2 addObject:sortArray[sortArray.count / 2]];

    for (NSInteger i = 0; i<sortArray.count / 2 - 1; i++) {

        [array1 addObject:sortArray[i]];
        [array1 addObject:sortArray[sortArray.count - i - 1]];

        [array2 addObject:sortArray[i + 1]];
        [array2 addObject:sortArray[sortArray.count - i - 2]];

        i++;
    }
}

if 语句里面的内容也可以抽一个方法, 就不再演示了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值