高级农民
- 积分
- 2293
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-8-24
- 最后登录
- 1970-1-1
|
写了一下第一题
- public class PrintOncall {
- class Oncall {
- List<String> namesToAdd;
- List<String> namesToRemove;
- public Oncall() {
- this.namesToAdd = new LinkedList<>();
- this.namesToRemove = new LinkedList<>();
- }
- }
- class Result {
- int[] interval;
- List<String> names;
- public Result(int[] interval, List<String> names) {
- this.interval = interval;
- this.names = names;
- }
- }
- public List<Result> solution(List<String> names, List<List<int[]>> intervals) {
- TreeMap<Integer, Oncall> map = new TreeMap<>();
- int n = names.size();
- for (int i = 0; i < n; i++) {
- String name = names.get(i);
- List<int[]> curIntervals = intervals.get(i);
- for (int[] interval : curIntervals) {
- int start = interval[0];
- int end = interval[1];
- Oncall toAdd = map.getOrDefault(start, new Oncall());
- toAdd.namesToAdd.add(name);
- map.put(start, toAdd);
- Oncall toRemove = map.getOrDefault(end, new Oncall());
- toRemove.namesToRemove.add(name);
- map.put(end, toRemove);
- }
- }
- Set<String> curNames = new HashSet<>();
- List<Result> res = new LinkedList<>();
- for (Map.Entry<Integer, Oncall> entry : map.entrySet()) {
- int idx = entry.getKey();
- List<String> namesToRemove = entry.getValue().namesToRemove;
- List<String> namesToAdd = entry.getValue().namesToAdd;
- Map.Entry<Integer, Oncall> prevEntry = map.lowerEntry(idx);
- if (prevEntry != null) {
- int prevIdx = prevEntry.getKey();
- res.add(new Result(new int[]{prevIdx, idx}, new LinkedList<>(curNames)));
- }
- for (String name : namesToRemove) {
- curNames.remove(name);
- }
- for (String name : namesToAdd) {
- curNames.add(name);
- }
- }
- return res;
- }
- public static void main(String[] args) {
- List<String> names = new LinkedList<>();
- names.add("Peter");
- names.add("Jane");
- List<List<int[]>> intervals = new LinkedList<>();
- List<int[]> intervals1 = new LinkedList<>();
- intervals1.add(new int[]{1, 3});
- List<int[]> intervals2 = new LinkedList<>();
- intervals2.add(new int[]{0, 2});
- intervals2.add(new int[]{3, 4});
- intervals.add(intervals1);
- intervals.add(intervals2);
- PrintOncall solution = new PrintOncall();
- List<Result> res = solution.solution(names, intervals);
- for (Result cur : res) {
- System.out.println(Arrays.toString(cur.interval));
- System.out.println(cur.names);
- }
- }
- // Input
- // Peter ______
- // Jane ______ ____
- // 0 1 2 3 4
- // Expected output
- // [[Jane], [[0, 1]]], [[Peter, Jane], [[1, 2]]], [[Peter], [[2, 3]]], [[Jane], [[3, 4]]]
- }
复制代码
Output:
- [0, 1]
- [Jane]
- [1, 2]
- [Peter, Jane]
- [2, 3]
- [Peter]
- [3, 4]
- [Jane]
- Process finished with exit code 0
复制代码 |
|