12
返回列表 发新帖
楼主: multiplelife
跳转到指定楼层
上一主题 下一主题
收起左侧

G店面

🔗
tinlittle 2019-4-29 01:58:21 | 只看该作者
全局:
标题是不是写错了?是电面不是店面吧。

第二题的Python实现,很简单,供初学者参考:

  1. from heapq import heapify, heappush, heappop
  2. class Solution:

  3.     def connect_sticks(self, sticks):

  4.         if not sticks: return 0
  5.         
  6.         total_cost = 0
  7.         heapify(sticks)
  8.         
  9.         while len(sticks) > 1:
  10.             stick1 = heappop(sticks)
  11.             stick2 = heappop(sticks)

  12.             total_cost += (stick1 + stick2)

  13.             heappush(sticks, stick1+stick2)
  14.         
  15.         return total_cost

  16. if __name__ == "__main__":
  17.     print(Solution().connect_sticks([1]))
  18.     print(Solution().connect_sticks([1,3,4]))
复制代码
回复

使用道具 举报

🔗
Neroldy 2019-4-29 14:50:16 | 只看该作者
全局:
第2题如果没啥要求的话应该就是用个优先队列每次取2个最短的合并。
回复

使用道具 举报

🔗
yayafuture 2019-4-29 23:55:06 | 只看该作者
全局:
Wyf2222 发表于 2019-4-28 00:09
Pq 然后每次都选两个最小的?

我也是这么想的,一个简单的证明思路不知道对不对,就是假设一共n段,那么需要连接n-1次,第一次连接的两段会加n-1次,第二次连接加进去的那段n-2次,所以要让总和最小,就从最短的开始
回复

使用道具 举报

🔗
mmao3 2019-5-5 02:48:56 | 只看该作者
全局:
第二题这个贪心算法证明起来还是不太容易 我没想明白 跟哈夫曼编码的原理很像
回复

使用道具 举报

🔗
阿满 2019-5-6 02:19:05 | 只看该作者
全局:
题二不是最小生成树吗?
回复

使用道具 举报

🔗
martinggww 2019-5-6 02:30:34 | 只看该作者
本楼:
全局:
厉害厉害
回复

使用道具 举报

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

本版积分规则

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