有两个序列a,b,大小都为n,序列元素的值是任意整数,无序。
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
例如:
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40]。
int cmp(const void *a, const void *b) { return *(int *) a - *(int *) b; } int sum(int*a, int len) { int temp = 0; for (int i = 0; i < len; ++i) { temp += a[i]; } return temp; } void printArr(int*a, int* b, int len) { for (int i = 0; i < len; ++i) cout << a[i] << " "; cout << endl; for (int i = 0; i < len; ++i) cout << b[i] << " "; cout << endl; } void Arrange(int a1[], int a2[], int len) { int *a3 = new int[2 * len]; //合并序列 for (int i = 0; i < len; ++i) { a3[i] = a1[i]; a3[i + len] = a2[i]; } //升序快排 qsort(a3, 2 * len, sizeof(int), cmp); //排序后的拆分序列 for (int i = 0; i < len; ++i) { a1[i] = a3[i]; a2[i] = a3[i + len]; } bool isSwap = false; int prevDif = sum(a2, len) - sum(a1, len); //存储上一次运算的差值。 while (true) { for (int i = 0; i < len; ++i) { int curDif = prevDif - 2 * a2[i] + 2 * a1[i]; //交换当前项后和的差值绝对值变小 if (abs(curDif) < abs(prevDif)) { swap(a1[i], a2[i]); prevDif = curDif; isSwap = true; //找到最佳值 } if (curDif == 0) return; } if (!isSwap) return; //重新排序 qsort(a1, len, sizeof(int), cmp); qsort(a2, len, sizeof(int), cmp); isSwap = false; } }
有两个序列a,b,大小都为n,序列元素的值是任意整数,无序。的更多相关文章
- 【编程题目】有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序;(需要回头仔细研究)
32.(数组.规划)有两个序列 a,b,大小都为 n,序列元素的值任意整数,无序:要求:通过交换 a,b 中的元素,使[序列 a 元素的和]与[序列 b 元素的和]之间的差最小.例如: var a=[ ...
- 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。
有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. 当前数组a和数组b的和之差为 A = sum(a) - ...
- 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理
验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...
- ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- 75 int类型数组中除了一个数出现一次或两次以外,其他数都出现三次,求这个数。[2行核心代码]
[本文链接] http://www.cnblogs.com/hellogiser/p/single-number-of-array-with-other-three-times.html [题目] i ...
- 两种计算Java对象大小的方法
之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...
- 累加按钮,自加1&&输入两个数字,比较大小
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1)
题目:在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1) 分析:这道题考察位操作:异或(^),按位与(&),移位操作(>> ...
- 寻找两个已序数组中的第k大元素
寻找两个已序数组中的第k大元素 1.问题描述 给定两个数组与,其大小分别为.,假定它们都是已按照增序排序的数组,我们用尽可能快的方法去求两个数组合并后第大的元素,其中,.例如,对于数组,.我们记第大的 ...
随机推荐
- [BZOJ 4403]序列统计
Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组 ...
- hdu 5830 FFT + cdq分治
Shell Necklace Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 【USACO】AC自动机
Description 对,这就是裸的AC自动机. 要求:在规定时间内统计出模版字符串在文本中出现的次数. Input 第一行:模版字符串的个数N. 第2->N+1行:N个字符串.(每个模版字符 ...
- hihocoder #1073 : 光棍节
描述 尽管付出了种种努力,jzp还是得过光棍节. jzp非常不爽,但也无能为力,只能够哀叹起来他的命运.他想到了一位长者的人生经验:"人的一生,不光要靠自我奋斗,也要考虑历史的进程" ...
- 【Remmarguts' Date】
一道来自POJ2449的题,它融合了单源点最短路算法.启发式搜索,让我们对“启发式”有更深的理解和体会.Wow! ·英文题,述大意: 读入n,m(n<=1000,m<=1000 ...
- bzoj1493[NOI2007]项链工厂 线段树
1493: [NOI2007]项链工厂 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1712 Solved: 723[Submit][Status] ...
- Windows下免安装版mysql5.7的初始密码
MySQL5.7之后,初始密码不在默认为空,而是随机生成的密码. 在mysql/data目录下,生成了一个.err文件(等同linux下的log日志文件,此文件会被mysql服务占用). 使用记事本可 ...
- Mybatis中 collection 和 association 的区别
public class A{ private B b1; private List<B> b2;} 在映射b1属性时用association标签,(一对一的关系) 映射b2时用colle ...
- js延迟函数
正确写法: setTimeout(function (){ alert("delay!"); },5000); 错误写法: setTimeout( alert("dela ...
- Eclipse 一直不停 building workspace完美解决总结
一.产生这个问题的原因多种1.自动升级 2.未正确关闭 3.maven下载lib挂起 等.. 二.解决总结(1).解决方法 方法1.修改eclipse启动文件 eclipse.ini ...