题目如下:

A conveyor belt has packages that must be shipped from one port to another within D days.

The i-th package on the conveyor belt has a weight of weights[i].  Each day, we load the ship with packages on the conveyor belt (in the order given by weights). We may not load more weight than the maximum weight capacity of the ship.

Return the least weight capacity of the ship that will result in all the packages on the conveyor belt being shipped within D days.

Example 1:

Input: weights = [1,2,3,4,5,6,7,8,9,10], D = 5
Output: 15
Explanation:
A ship capacity of 15 is the minimum to ship all the packages in 5 days like this:
1st day: 1, 2, 3, 4, 5
2nd day: 6, 7
3rd day: 8
4th day: 9
5th day: 10 Note that the cargo must be shipped in the order given, so using a ship of capacity 14 and splitting the packages into parts like (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) is not allowed.

Example 2:

Input: weights = [3,2,2,4,1,4], D = 3
Output: 6
Explanation:
A ship capacity of 6 is the minimum to ship all the packages in 3 days like this:
1st day: 3, 2
2nd day: 2, 4
3rd day: 1, 4

Example 3:

Input: weights = [1,2,3,1,1], D = 4
Output: 3
Explanation:
1st day: 1
2nd day: 2
3rd day: 3
4th day: 1, 1

Note:

  1. 1 <= D <= weights.length <= 50000
  2. 1 <= weights[i] <= 500

解题思路:首先可以确认Capacity的最小值是1,最大值是50000*500。因为知道上下限,所以这里可以采用二分查找的方法。记w[i]为前i个包裹的重量和,显然w是一个递增的数组,假设Capacity为mid,那第一天可以装载的包裹的重量就是在w中最大的小于或者等于mid的元素,这里记为w[j],那第二天能装载的最大重量就是w[j] + mid,同理可以在w中最大的小于或者等于w[j]+mid的元素,因为w是有序的,所以这里继续使用二分查找,如果D天装载的包裹重量能大于或者等于w[-1],那么表示mid满足条件,下一步让 = mid - 1;如果不满足说明则令mid = low + 1,直到找出最小的mid为止。

代码如下:

class Solution(object):
def shipWithinDays(self, weights, D):
"""
:type weights: List[int]
:type D: int
:rtype: int
"""
w = []
low = 0
for i in weights:
low = max(low,i)
if len(w) == 0:
w += [i]
else:
w += [w[-1] + i]
#print w
high = 50000*500
res = float('inf')
import bisect
while low <= high:
mid = (low+high)/2
start = 0
times = 1
tmp_weight = mid
while times <= D:
inx = bisect.bisect_left(w,tmp_weight,start)
if inx == len(w):
break
elif tmp_weight == w[inx]:
if inx == len(w) - 1:
break
tmp_weight = w[inx] + mid
times += 1
else:
tmp_weight = w[inx-1] + mid
times += 1
#print mid,times
if times <= D and tmp_weight >= w[-1]:
res = min(res,mid)
high = mid -1
else:
low = mid + 1 return res

【leetcode】1014. Capacity To Ship Packages Within D Days的更多相关文章

  1. 【LeetCode】1014. Capacity To Ship Packages Within D Days 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. Leetcode 1014. Capacity To Ship Packages Within D Days

    二分搜索 class Solution(object): def shipWithinDays(self, weights, D): """ :type weights: ...

  3. 128th LeetCode Weekly Contest Capacity To Ship Packages Within D Days

    A conveyor belt has packages that must be shipped from one port to another within D days. The i-th p ...

  4. Leetcode之二分法专题-1011. 在 D 天内送达包裹的能力(Capacity To Ship Packages Within D Days)

    Leetcode之二分法专题-1011. 在 D 天内送达包裹的能力(Capacity To Ship Packages Within D Days) 传送带上的包裹必须在 D 天内从一个港口运送到另 ...

  5. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  6. 【Leetcode】Pascal&#39;s Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...

  7. 53. Maximum Subarray【leetcode】

    53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...

  8. 27. Remove Element【leetcode】

    27. Remove Element[leetcode] Given an array and a value, remove all instances of that value in place ...

  9. 【刷题】【LeetCode】007-整数反转-easy

    [刷题][LeetCode]总 用动画的形式呈现解LeetCode题目的思路 参考链接-空 007-整数反转 方法: 弹出和推入数字 & 溢出前进行检查 思路: 我们可以一次构建反转整数的一位 ...

随机推荐

  1. 关于Calendar和Reminder(日历和提醒)编程指南

    Event Kit框架使你能访问用户的Calendar.app和Reminders.app信息.虽然这是两个不同的app,但是他们使用相同的框架处理数据.类似地,存储这些数据的数据库,被称为日历数据库 ...

  2. BaseActivity 基类

    public abstract class BaseActivity extends AppCompatActivity implements IBaseView { private ProxyAct ...

  3. day05—JavaScript之函数调用

    转行学开发,代码100天——2018-03-21 JavaScript中的函数调用有4种方式: 方式一:直接通过函数名调用 在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTM ...

  4. BurpSuite从下载安装到配置使用

    为解决一个XSS安全问题,第一次使用BurpSuite,记录一下下载安装到配置使用的过程,希望能对第一次使用该工具的朋友有所帮助. 一.下载及安装 直接百度下载破解版,我下的版本是burpsuite_ ...

  5. mongo可视化工具adminMongo安装

    git环境搭建下载地址:https://git-scm.com/downloads 此处,安装环境为windows操作系统,所以选择windows版本下载一直下一步,直至安装完成找到安装git的目录下 ...

  6. 浮点数float累加误差解决方式总结

    首先是float累加产生误差的原因,该部分转自:http://blog.csdn.net/zhrh0096/article/details/38589067 1.  浮点数IEEE 754表示方法 要 ...

  7. 004--PowerDesigner设置显示1对多等关系

    PowerDesigner设置显示1对多等关系 Step1:双击Reference连接线 Step2:设置Cardinality Step3:显示Cardinality Tools->Displ ...

  8. Java中的类修饰符

    资料主要来源于网络(http://60.28.60.3/zy/java-new/zhishidian/chap3/3.htm) 之前每次写小测试程序的时候,总是把一个类放在一个Java文件中,按理说这 ...

  9. SQLServer2008查询时对象名无效

    情况一:如果表名是关键字,查询时把表名括起来,不作为关键字使用 情况二:看左上角显示的是否是master,这是数据库的默认系统库,点选这个改成自己的即可

  10. Robotframework使用DatabaseLibrary连接mysql数据库

    Robotframework使用DatabaseLibrary连接mysql数据库 进行数据库操作,需要安装相应的操作库.DatabaseLibrary是常用的库之一,它能兼容MySQL.Oracle ...