华为面试题 题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
2015-10-28 17:55
555 查看
package com.yzh.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortList {
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
a.add(1);
a.add(3);
a.add(4);
a.add(8);
System.out.println("sum(a):"+sum(a));
List<Integer> b = new ArrayList<>();
b.add(2);
b.add(6);
b.add(7);
b.add(5);
System.out.println("sum(b):"+sum(b));
List<Integer> ab = new ArrayList<>();
ab.addAll(a);
ab.addAll(b);
Collections.sort(ab);
System.out.println(ab.toString());
System.out.println("sum(ab):"+sum(ab));
a = new ArrayList<>();
b = new ArrayList<>();
int size = ab.size();
for(int i=0; i<size;i=i+2){
if(a.size()<1 && b.size()<1){
a.add(ab.get(i));
b.add(ab.get(i+1));
continue;
}
//集合的和大的先放小的数据
if(sum(a)>sum(b)){
a.add(ab.get(i));
b.add(ab.get(i+1));
continue;
//集合的和大的先放小的数据
}else if(sum(b)>sum(a)){
b.add(ab.get(i));
a.add(ab.get(i+1));
continue;
//一样大
}else{
a.add(ab.get(i));
b.add(ab.get(i+1));
continue;
}
}
int suma = sum(a);
int sumb = sum(b);
System.out.println(suma>sumb ? suma-sumb : sumb-suma);
}
public static int sum(List<Integer> list){
int sum=0;
for(int num : list){
sum+=num;
}
return sum;
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortList {
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
a.add(1);
a.add(3);
a.add(4);
a.add(8);
System.out.println("sum(a):"+sum(a));
List<Integer> b = new ArrayList<>();
b.add(2);
b.add(6);
b.add(7);
b.add(5);
System.out.println("sum(b):"+sum(b));
List<Integer> ab = new ArrayList<>();
ab.addAll(a);
ab.addAll(b);
Collections.sort(ab);
System.out.println(ab.toString());
System.out.println("sum(ab):"+sum(ab));
a = new ArrayList<>();
b = new ArrayList<>();
int size = ab.size();
for(int i=0; i<size;i=i+2){
if(a.size()<1 && b.size()<1){
a.add(ab.get(i));
b.add(ab.get(i+1));
continue;
}
//集合的和大的先放小的数据
if(sum(a)>sum(b)){
a.add(ab.get(i));
b.add(ab.get(i+1));
continue;
//集合的和大的先放小的数据
}else if(sum(b)>sum(a)){
b.add(ab.get(i));
a.add(ab.get(i+1));
continue;
//一样大
}else{
a.add(ab.get(i));
b.add(ab.get(i+1));
continue;
}
}
int suma = sum(a);
int sumb = sum(b);
System.out.println(suma>sumb ? suma-sumb : sumb-suma);
}
public static int sum(List<Integer> list){
int sum=0;
for(int num : list){
sum+=num;
}
return sum;
}
}
相关文章推荐
- 黑马程序员——java语言基础组成(二)
- 运维技术面试积累
- SSH 面试题集锦
- 程序员的10条建议
- 黑马程序员——OC基础---Foundation之NSString
- 转:面试题:“你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”
- 程序员的发展方向 人生战略 个人规划 小黄人软件 每天啃书18小时未来十年supermindsoft.com
- selenium面试题
- selenium面试题总结
- 网易嵌入式面试 2015年9月2日下午网易视频二面
- 网易嵌入式面试 2015年8月19日晚网易电话面试
- 二分查找
- 10 个让程序员放松的网站
- 一些职场的忠告
- 如何度过职业生涯?
- 七个对我最重要的职业建议(译文)
- 黑马程序员——java语言基础组成(一)
- 不只是给面试加分 -- Java WeakReference的理解与使用
- 几个Java基础面试题
- 阿里面试重点总结