From c1721970358ca98ac52d579626984a92f018fefd Mon Sep 17 00:00:00 2001 From: Junyan Zhang Date: Mon, 17 Jun 2019 22:53:38 -0400 Subject: [PATCH] Corrected --- pom.xml | 2 +- .../org/zjy/learn/code/amazon/FindSongs.java | 2 +- .../learn/code/amazon/ReorderLogFiles.java | 4 + .../zjy/learn/code/amazon/TwoSumClosest.java | 76 ++++++++++++++++++- src/main/java/org/zjy/learn/util/Main.java | 1 - 5 files changed, 78 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 5d77b71..36800f0 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ org.reflections reflections - 0.9.9 + 0.9.11 \ No newline at end of file diff --git a/src/main/java/org/zjy/learn/code/amazon/FindSongs.java b/src/main/java/org/zjy/learn/code/amazon/FindSongs.java index e863b5b..fe3f5bc 100644 --- a/src/main/java/org/zjy/learn/code/amazon/FindSongs.java +++ b/src/main/java/org/zjy/learn/code/amazon/FindSongs.java @@ -14,6 +14,6 @@ public void run() { } private int[] findSongs(int[] songs) { - + return null; } } diff --git a/src/main/java/org/zjy/learn/code/amazon/ReorderLogFiles.java b/src/main/java/org/zjy/learn/code/amazon/ReorderLogFiles.java index 9cea684..a4668b7 100644 --- a/src/main/java/org/zjy/learn/code/amazon/ReorderLogFiles.java +++ b/src/main/java/org/zjy/learn/code/amazon/ReorderLogFiles.java @@ -1,3 +1,7 @@ +package org.zjy.learn.code.amazon; + +import java.util.Arrays; + public class ReorderLogFiles { public String[] reorderLogFiles(String[] logs) { Arrays.sort(logs, (a, b) -> { diff --git a/src/main/java/org/zjy/learn/code/amazon/TwoSumClosest.java b/src/main/java/org/zjy/learn/code/amazon/TwoSumClosest.java index 738b221..10f3a72 100644 --- a/src/main/java/org/zjy/learn/code/amazon/TwoSumClosest.java +++ b/src/main/java/org/zjy/learn/code/amazon/TwoSumClosest.java @@ -3,10 +3,11 @@ import org.zjy.learn.util.Application; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.TreeMap; -@Application(time = "06/17/2019 13:00") +@Application(time = "06/17/2019 22:08") public class TwoSumClosest implements Runnable { /** * two sum closest @@ -16,11 +17,78 @@ public class TwoSumClosest implements Runnable { */ @Override public void run() { - List result1 = twoSumClosest(new int[][]{{1, 3}, {2, 4}, {3, 1}, {4, 2}}, new int[][]{{5, 3}, {6, 4}}, 8); - for (Integer[] pair : result1) { - System.out.println(pair[0] + " " + pair[1]); +// List result1 = twoSumClosest(new int[][]{{1, 3}, {2, 4}, {3, 1}, {4, 2}}, new int[][]{{5, 3}, {6, 4}}, 8); +// for (Integer[] pair : result1) { +// System.out.println(pair[0] + " " + pair[1]); +// } + + int deviceCapacity1 = 20; + List> foreground1 = new ArrayList<>(); + foreground1.add(Arrays.asList(1, 8)); + foreground1.add(Arrays.asList(2, 7)); + foreground1.add(Arrays.asList(3, 14)); + List> background1 = new ArrayList<>(); + background1.add(Arrays.asList(1, 5)); + background1.add(Arrays.asList(2, 10)); + background1.add(Arrays.asList(3, 14)); + // expect: 3 1 + + int deviceCapacity2 = 20; + List> foreground2 = new ArrayList<>(); + foreground2.add(Arrays.asList(1, 8)); + foreground2.add(Arrays.asList(2, 15)); + foreground2.add(Arrays.asList(3, 9)); + List> background2 = new ArrayList<>(); + background2.add(Arrays.asList(1, 8)); + background2.add(Arrays.asList(2, 11)); + background2.add(Arrays.asList(3, 12)); + // expect: + // 1 3 + // 3 2 + + System.out.println("1:"); + output(optimalUtilization(deviceCapacity1, foreground1, background1)); + System.out.println("2:"); + output(optimalUtilization(deviceCapacity2, foreground2, background2)); + } + + private List> optimalUtilization( + int deviceCapacity, + List> foregroundAppList, + List> backgroundAppList) + { + // WRITE YOUR CODE HERE + TreeMap> tree = new TreeMap<>(); + for (List pair : backgroundAppList) { + List list = tree.getOrDefault(pair.get(1), new ArrayList<>()); + list.add(pair.get(0)); + tree.put(pair.get(1), list); + } + TreeMap>> result = new TreeMap<>(); + for (List pair : foregroundAppList) { + Integer floorKey = tree.floorKey(deviceCapacity - pair.get(1)); + if (floorKey != null) { + int diff = Math.abs(deviceCapacity - pair.get(1) - floorKey); + List> list = result.getOrDefault(diff, new ArrayList<>()); + for (int id : tree.get(floorKey)) { + List match = new ArrayList<>(); + match.add(pair.get(0)); + match.add(id); + list.add(match); + } + result.put(diff, list); + } } + return result.get(result.firstKey()); + } + private void output(List> matrix) { + for (List row : matrix) { + for (int col : row) { + System.out.print(col + " "); + } + System.out.println(); + } } /** diff --git a/src/main/java/org/zjy/learn/util/Main.java b/src/main/java/org/zjy/learn/util/Main.java index 7e155fb..f9d25dc 100644 --- a/src/main/java/org/zjy/learn/util/Main.java +++ b/src/main/java/org/zjy/learn/util/Main.java @@ -1,6 +1,5 @@ package org.zjy.learn.util; - import org.reflections.Reflections; import java.lang.annotation.Annotation;