public static void main(String[] args) {
List<Integer> numbers = generateNumbers(50, 100);
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
spread(numbers, list1, list2);
System.out.printf("Liste 1: %s Zahlen und Summe %s\n", list1.size(), sum (list1));
System.out.printf("Liste 2: %s Zahlen und Summe %s", list2.size(), sum (list2));
}
public static List<Integer> generateNumbers(int max, int quantity) {
List<Integer> numbers = new ArrayList<>();
Random rand = new Random ();
for (int i = 0; i < quantity; i++) {
numbers.add (rand.nextInt(max));
}
return numbers;
}
public static void spread (List<Integer> numbers, List<Integer> list1, List<Integer> list2) {
// sortieren
Collections.sort(numbers, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 == o2) {
return 0;
}
return o1 < o2 ? 1 : -1;
}
});
// auf listen verteilen
int sum1 = 0;
int sum2 = 0;
for (int number : numbers) {
if (sum1 < sum2) {
list1.add (number);
sum1 += number;
} else {
list2.add (number);
sum2 += number;
}
}
}
public static int sum (List<Integer> numbers) {
int sum = 0;
for (int i : numbers) {
sum += i;
}
return sum;
}
static List<Integer> zahlen = Arrays.asList(2, 500,2300,54,2334, 4000,20,9);
static List<Integer> stapelA = new ArrayList<Integer>();
static List<Integer> stapelB = new ArrayList<Integer>();
public static void main(String[] args) throws Exception {
Integer[] z = zahlen.toArray(new Integer[0]);
List<Integer> zu = stapelA;
List<Integer> nichtzu = stapelB;
Arrays.sort(z, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
for(int i = 0; i < z.length; i++) {
if(sum(zu) > sum(nichtzu)) {
List<Integer> b = zu;
zu = nichtzu;
nichtzu = b;
}
zu.add(z[i]);
}
System.out.println(sum(stapelA));
System.out.println(sum(stapelB));
}
static int sum(List<Integer> stapel) {
int summe = 0;
for (Integer integer : stapel) {
summe += integer;
}
return summe;
}
zu : nichtzu
1 1
1 1
4
@hüteüberhüte: doch funktioniert problemlos, deswegen sortier ich ja extra absteigend![]()
1. Sortiere (größte zuerst)
2. das erste (größte) Objekt nehme und auf Stabel A lege
3. so lange Objekte auf Stapel B lege bis Summe(Stapel B) >= Summe(Stapel A)
4. so lange Objekte auf Stapel A lege bis Summe(Stapel A) >= Summe(Stapel B)
5. wenn noch Elemente vorhanden sind wieder zu 3. Springen.
@Marco13, hast du vielleicht noch ein paar Gegenbeispiele? Dieses eine kann man ja noch relativ einfach "umgehen".
Außerdem, warum sollte man gerade dir die Lorbeeren der Arbeit geben, wenn wirklich jemand einen schnelleren Algorithmus gefunden hätte ^^