Advertisement
1011. Capacity To Ship Packages Within D Days
MediumView on LeetCode
1011.cs
C#
public class Solution {
public int ShipWithinDays(int[] weights, int days) {
int maxEle = Int32.MinValue;
int sumofW = 0;
for(int i = 0; i < weights.Length; i++)
{
maxEle = Math.Max(maxEle, weights[i]);
sumofW += weights[i];
}
int low = maxEle, high = sumofW;
int ans = -1;
while(low <= high)
{
int mid = (low + high) / 2;
int daysRequired = GetDaysRequired(weights, mid);
if(daysRequired <= days)
{
ans = mid;
high = mid - 1;
}
else
low = mid + 1;
}
return ans;
}
private int GetDaysRequired(int[] weights, int capacity)
{
int days = 1, load = 0;
for(int i = 0; i < weights.Length; i++)
{
load += weights[i];
if(load > capacity)
{
load = weights[i];
days++;
}
}
return days;
}
}1011.go
Go
import "math"
func shipWithinDays(weights []int, days int) int {
maxEle := math.MinInt32;
var sumOfW int
for i := 0; i < len(weights); i++ {
if maxEle < weights[i] {
maxEle = weights[i]
}
sumOfW += weights[i]
}
low := maxEle
high := sumOfW
ans := -1
for low <= high {
mid := (low + high) / 2
daysRequired := getDaysRequired(weights, mid)
if(daysRequired <= days) {
ans = mid
high = mid - 1
} else {
low = mid + 1
}
}
return ans
}
func getDaysRequired(weights []int, capacity int) int {
days := 1
var load int
for i := 0; i < len(weights); i++ {
load += weights[i]
if(load > capacity) {
load = weights[i]
days++
}
}
return days
}Advertisement
Was this solution helpful?