查看: 1800| 回复: 2
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 最大化连续子串最小sum (LC 410 变种)

全局:
高频题
公司名称: google

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x


最大化连续子串最小sum (LC 410)

有一个数组,分成K部分,要求, min of subarray sum is maximized,   [1,2,4,3,3]  分成3部分,  你可以分成   1| 2,4|3,3  最小数组 是1,  但是你分成 1,2 |4|3,3 最小的数组sum就变成了3.  3是想要的答案。 这个我提出了DP和recursive, 面试官都不满意, 最后用的是二分查找.    比如说你给 一个数 N , 看这个数组能不能被分成K部分, 每个部分都大于N,  如果不能,就试试N/2。


看G家面经 发现这道 LC410 变种, 请大家帮看看我的解法是否正确

  1. class Solution(object):
  2.     def splitArray(self, nums, m):
  3.         """
  4.         :type nums: List[int]
  5.         :type m: int
  6.         :rtype: int
  7.         """
  8.         def canDivideToM(target, nums, m):
  9.             '''
  10.             if we can divide nums to more than m subarray with target as sum
  11.             for each subarray, it means the target is too small, if we can't             mean target is too big
  12.             '''
  13.             count=1
  14.             total=0
  15.             
  16.             for num in nums:
  17.                 total+=num
  18.                 if total>=target:
  19.                     total=0
  20.                     count+=1
  21.                     
  22.                     if count > m:
  23.                         return True
  24.             return False
  25.                         
  26.         
  27.         #low bound
  28.         left= minNum = min(nums)
  29.         #high bound
  30.         right = sumNums = sum(nums)
  31.         
  32.         # Binary search Template
  33.         while left<=right:
  34.             mid = (left+right)/2
  35.             
  36.             if canDivideToM(mid, nums, m):
  37.                 left=mid+1
  38.             else:
  39.                 right=mid-1
  40.         return right
  41.                
  42.         
  43.         
复制代码


评分

参与人数 3大米 +9 收起 理由
Neroldy + 1 很有用的信息!
xz28us + 3 很有用的信息!
14417335 + 5

查看全部评分


上一篇:5.2 Facebook 跪经
下一篇:编程之法:面试和算法心得
推荐
mint0715 2019-5-18 08:31:14 | 只看该作者
全局:
小优化
1. high bond = sum/k instead of sum
2. 累加target的时候如果发现剩余的数<还需要的分段数,可以提前结束。

评分

参与人数 1大米 +1 收起 理由
hua88 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
jollibeeee 2019-5-18 10:33:31 | 只看该作者
全局:
这就是巧克力甜度吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表