diff --git a/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README.md b/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README.md index 3d27003d8ee86..fed97ccec7be0 100644 --- a/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README.md +++ b/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README.md @@ -80,7 +80,38 @@ ```java - +class Solution { + public int shipWithinDays(int[] weights, int days) { + int left = 1, right = Integer.MAX_VALUE; + while (left < right) { + int mid = (left + right) >> 1; + if (canCarry(weights, days, mid)) { + right = mid; + } else { + left = mid + 1; + } + } + return left; + } + + + public boolean canCarry(int[] weights, int days, int carry) { + int useDay = 1; + int curCarry = 0; + for (int weight : weights) { + if (weight > carry) { + return false; + } + if ((carry - curCarry) >= weight) { + curCarry += weight; + } else { + curCarry = weight; + useDay++; + } + } + return useDay <= days; + } +} ``` ### **...** diff --git a/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README_EN.md b/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README_EN.md index 2b83dcfe57b94..92671f3ff30fd 100644 --- a/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README_EN.md +++ b/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/README_EN.md @@ -71,7 +71,38 @@ Note that the cargo must be shipped in the order given, so using a ship of capac ### **Java** ```java - +class Solution { + public int shipWithinDays(int[] weights, int days) { + int left = 1, right = Integer.MAX_VALUE; + while (left < right) { + int mid = (left + right) >> 1; + if (canCarry(weights, days, mid)) { + right = mid; + } else { + left = mid + 1; + } + } + return left; + } + + + public boolean canCarry(int[] weights, int days, int carry) { + int useDay = 1; + int curCarry = 0; + for (int weight : weights) { + if (weight > carry) { + return false; + } + if ((carry - curCarry) >= weight) { + curCarry += weight; + } else { + curCarry = weight; + useDay++; + } + } + return useDay <= days; + } +} ``` ### **...** diff --git a/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/Solution.java b/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/Solution.java new file mode 100644 index 0000000000000..62f0e2ec7bd4f --- /dev/null +++ b/solution/1000-1099/1011.Capacity To Ship Packages Within D Days/Solution.java @@ -0,0 +1,32 @@ +class Solution { + public int shipWithinDays(int[] weights, int days) { + int left = 1, right = Integer.MAX_VALUE; + while (left < right) { + int mid = (left + right) >> 1; + if (canCarry(weights, days, mid)) { + right = mid; + } else { + left = mid + 1; + } + } + return left; + } + + + public boolean canCarry(int[] weights, int days, int carry) { + int useDay = 1; + int curCarry = 0; + for (int weight : weights) { + if (weight > carry) { + return false; + } + if ((carry - curCarry) >= weight) { + curCarry += weight; + } else { + curCarry = weight; + useDay++; + } + } + return useDay <= days; + } +} \ No newline at end of file