对于这个难题,我们可以利用最大 - 蜂座来存储精灵以降序携带的卡路里。
对于问题的第1部分,我们可以查看最大卡路里的最大卡路里
,对于第2部分,我们可以循环循环上最大 - 高峰,并找到携带的最大3卡路里的总和。
我们可以以相反的顺序使用PriorityQueue
,以在java
中制作最大头。
import java.io.File;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Day1 {
public static void main(String[] args) throws Exception {
String path = "D:\\projects\\AdventOfCode\\src\\input.txt";
File input = new File(path);
Scanner sc = new Scanner(input);
var pq = new PriorityQueue<Integer>(Collections.reverseOrder()); // max-heap
int calories = 0;
while (sc.hasNextLine()) {
String calorie = sc.nextLine();
// reset for new elf
if (calorie.equals("")) {
pq.offer(calories);
calories = 0;
continue;
}
calories += Integer.parseInt(calorie);
}
System.out.println("Result part 1 : " + pq.peek());
int res = 0;
for (int i = 0; i < 3; i++) {
res += pq.poll();
}
System.out.println("Result part 2 : " + res);
sc.close();
}
}