楼主: 14417335
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 巧克力甜度

🔗
Lunluen 2019-3-28 02:22:53 | 只看该作者
全局:
我觉得binary search的解有点太tricky了
想不到一个思路来跟面试官从无到有讨论出这样的想法
有人有idea吗

我目前的考量是, 假如我在面试遇到这题
我可能会先提到DP, 从recursion到bottom-up
然后space从O(NM)到O(N)
中途看看面试官会不会不满意而给我binary search的hint
没有的话就不回答这个做法了
不然有点太明显写过这道题目
回复

使用道具 举报

🔗
kaipeng21 2019-3-28 04:35:35 | 只看该作者
全局:
Lunluen 发表于 2019-3-28 02:22
我觉得binary search的解有点太tricky了
想不到一个思路来跟面试官从无到有讨论出这样的想法
有人有idea ...

如果我要面到这题,我设定的剧本是就先带个例子,手算expected answer,过程就试一下不同的分割方法,说这样分太大了,这样分又太小了,所以 这样分好像是最大了不可能再更大了......这样带两个例子,最后说其实答案好像可以用于得,根据猜的结果把边往往或往下调,就可以相对而言比较自然地衔接到怎么想到二分法了
回复

使用道具 举报

全局:
最多能分 int(sum // n), 最少1 。 用二分。

二分内部目标如果是mid,逻辑是至少有mid:
遍历数组,一旦到达mid就中断切开,切完N- 1刀剩下的大于mid说明可行: l = mid; 小于说明不可行: r = mid - 1。
回复

使用道具 举报

全局:
我还以为楼主有推荐的好吃的巧克力
回复

使用道具 举报

🔗
ziwei1992 2019-4-11 12:36:26 | 只看该作者
全局:
贡献一个dp解法吧,复杂度肯定不如二分。但之前看到加油站那个题(好像是,记不太清了)面试管强行要求dp解,准备份dp的以防万一



  1. def chocolate(nums, k):
  2.         # time: O(n^2 * k) space: O(nk)
  3.         if not nums or len(nums) < k:
  4.             return 0
  5.         
  6.         pre_sum = [0] * (len(nums) + 1)
  7.         for i in xrange(len(nums)):
  8.             pre_sum[i + 1] = pre_sum[i] + nums[i]
  9.         
  10.         dp = [[0] * (len(nums) + 1) for _ in xrange(k + 1)]
  11.         for i in xrange(1, len(nums) + 1):
  12.             dp[1][i] = pre_sum[i]
  13.         
  14.         for i in xrange(2, k + 1):
  15.             for j in xrange(i, len(nums) + 1):
  16.                 for m in xrange(1, j):
  17.                     dp[i][j] = max(dp[i][j], min(dp[i - 1][m], pre_sum[j] - pre_sum[m]))
  18.         
  19.         return dp[k][len(nums)]
复制代码





回复

使用道具 举报

全局:
肆意领 原题 minimize最大的sum 不就是maximize最小的sum
因为切大了都被别人拿走了只剩下最小的留给自己,所以给别人少点就相当于给自己多一点
回复

使用道具 举报

🔗
bradFCB 2019-4-16 12:35:25 | 只看该作者
全局:
kaipeng21 发表于 2019-3-18 22:55
原题是猜一个数使每一片段都 =这个数,这少可以分成n片(或是找最小的一个数,让他无法分成n片)

****  ...

Good work! Although small problem at initialization: you set l = min(nums). What would happen if the length of array (# of chocolates) is less than the # of people? Your solution will return min(nums) rather than the correct solution which is 0.
回复

使用道具 举报

全局:
bradFCB 发表于 2019/04/16 12:35:25


Good work! Although small problem at initialization: you set l = min(nums). What would happen if t...

是的,所以通常面试第一件事情就是把k的范围讲清楚,这样面试官就不会挑了
回复

使用道具 举报

🔗
willywoo 2019-4-27 06:15:50 | 只看该作者
全局:
        给你点个赞!
回复

使用道具 举报

🔗
hoort 2019-5-12 07:19:50 | 只看该作者
全局:
kaipeng21 发表于 2019-3-18 22:55
原题是猜一个数使每一片段都 =这个数,这少可以分成n片(或是找最小的一个数,让他无法分成n片)

****  ...

为什么这个total >= target 以后不把 total = num 而是 set 成0
这样算total 不就少了一个值了么?
回复

使用道具 举报

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

本版积分规则

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