Leetcode1011. 在D天内送达包裹的能力
1. 问题描述


2. 思路
二分查找
3. 代码
func shipWithinDays(weights []int, days int) int {
sum := 0
for i := 0; i < len(weights); i++ {
sum += weights[i]
}
max := getMax(weights)
left, right := max, sum
for left <= right {
mid := left + (right - left) / 2
midDays := countDays(weights, mid)
if midDays == days { // 天数相等,尝试下使用更小的船
right = mid - 1
} else if midDays < days { // 很少的天数就能完成,船太大了,浪费
right = mid - 1
} else { // 很多天才能完成,船太小
left = mid + 1
}
}
return left
}
func getMax(nums []int) int {
max := nums[0]
for i := 0; i < len(nums); i++ {
if nums[i] > max {
max = nums[i]
}
}
return max
}
func countDays(weights []int, k int) int {
var count int
i, sum := 0, 0
for i < len(weights) {
sum += weights[i]
if sum < k && i == len(weights) - 1 {
count++
}
if sum == k {
sum = 0
count++
}
if sum > k {
sum = 0
i--
count++
}
i++
}
return count
}
本文介绍了如何使用二分查找算法解决LeetCode第1011题,在限定天数内送达包裹的能力。通过计算总重量、找到最大重量和计算所需天数,逐步调整船只载重能力,找到最小载重需求。
394

被折叠的 条评论
为什么被折叠?



