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

Square的店面

全局:

2016(4-6月) 码农类General 博士 全职@square - 内推 - 技术电面  | | Other | 应届毕业生

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

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

x
店面就一轮,顺便问问有没有更好的思路,算是设计题目,第一问就是一堆人出去玩,吃饭或者什么的,有人先付钱,其他人欠着,最后求每个人的balance.
比如 person A,B,C
Transaction 1 is 12$
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
的是维持两个queue,一个是欠钱的,一个是收钱的,队首print,然后balance清零出队。不知道有没有更好的思路。

上一篇:lyft电面一题
下一篇:Azure面经
推荐
johnnywsd 2017-1-24 15:50:56 | 只看该作者
全局:
  1. from collections import defaultdict


  2. class Solution:
  3.     def get_balance(self, transations):
  4.         balance_dct = defaultdict(int)
  5.         for amount, payer, payees in transations:
  6.             balance_dct[payer] -= amount
  7.             amount_payee = float(amount) / len(payees)
  8.             for payee in payees:
  9.                 balance_dct[payee] += amount_payee
  10.         return balance_dct

  11.     def get_due(self, balance_dct):
  12.         if sum(balance_dct.values()) != 0:
  13.             raise Exception('Not balance')
  14.         debets = sorted([it for it in balance_dct.items() if it[1] > 0], key=lambda x: x[1])
  15.         credit = sorted([it for it in balance_dct.items() if it[1] < 0], key=lambda x: -x[1])
  16.         give_dct = defaultdict(list)
  17.         while debets and credit:
  18.             debet_user, debet_val = debets.pop()
  19.             credit_user, credit_val = credit.pop()
  20.             bal = debet_val + credit_val
  21.             if bal > 0:
  22.                 debets.append((debet_user, bal))
  23.             elif bal < 0:
  24.                 credit.append((credit_user, bal))

  25.             give_dct[debet_user].append((credit_user, min(debet_val, -credit_val)))
  26.         return give_dct
复制代码

  1. import unittest
  2. from solution import Solution

  3. class Tests(unittest.TestCase):
  4.     def test_1(self):
  5.         sol = Solution()
  6.         transations = [(12, 'A', ('A', 'B', 'C')), (10, 'B', ('A', 'B'))]
  7.         res = sol.get_balance(transations)
  8.         print res

  9.     def test_2(self):
  10.         sol = Solution()
  11.         transations = [(12, 'A', ('A', 'B', 'C')), (10, 'B', ('A', 'B'))]
  12.         balance_dct = sol.get_balance(transations)
  13.         res = sol.get_due(balance_dct)
  14.         print res

  15. if __name__ == '__main__':
  16.     unittest.main(verbosity=2)
复制代码
回复

使用道具 举报

全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

推荐
 楼主| nothingtrouble 2016-2-25 03:08:59 | 只看该作者
全局:
wtcupup 发表于 2016-2-24 15:12
楼主你第一问的思路是什么?

第一问,就是每个人付钱以后,更新balance,然后其他没有付钱的参与这次消费的,也更新balance。第二问接着就是根据所有人的balance,找出一个方案然后所有人把帐结清
回复

使用道具 举报

全局:
这应该是一个有向图的遍历
回复

使用道具 举报

🔗
wtcupup 2016-2-24 15:12:00 | 只看该作者
全局:
楼主你第一问的思路是什么?
回复

使用道具 举报

🔗
daniel_hl 2016-2-24 15:35:09 | 只看该作者
全局:
第二问要求求出最简单的清算方法吗?还是只要能给清就行?
回复

使用道具 举报

🔗
 楼主| nothingtrouble 2016-2-25 03:06:16 | 只看该作者
全局:
kinggarden2001 发表于 2016-2-24 13:05
这应该是一个有向图的遍历

你想复杂了吧,这题不要求谁一定给谁钱,只要最后大家少付钱的多付,多付钱的拿进钱就可以了
回复

使用道具 举报

🔗
 楼主| nothingtrouble 2016-2-25 03:07:06 | 只看该作者
全局:
daniel_hl 发表于 2016-2-24 15:35
第二问要求求出最简单的清算方法吗?还是只要能给清就行?

没有具体要求,应该是給清就好
回复

使用道具 举报

🔗
echo33 2016-2-25 04:54:12 | 只看该作者
全局:
第一题可以用一个n*n matrix吗,类似图了 这样第二问也解决了 就是矩阵可能很稀疏 浪费空间

如果是稀疏矩阵就用个hashmap也可以
回复

使用道具 举报

回复

使用道具 举报

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

本版积分规则

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