由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求思路
相关主题
问 Facebook Onsite 一题问个越界的问题
onsite完,攒rp系列(二)请教一个题目
问两道bloomberg的题目atoi很不好写,头都大了...
请问如何安全地reverse 一个integer弱弱的问一个问题
str2int中overflow该如何处理?写了个atoi,大家帮看有没有哪里错了?
经典题atoi的溢出处理问一道google面试题
问个简单C reverse int函数atoi的实现
问个《编程实践》(英文版)里面的问题atoi overflow怎么办?
相关话题的讨论汇总
话题: int话题: receive话题: ans话题: num话题: give
进入JobHunting版参与讨论
1 (共1页)
a*****a
发帖数: 46
1
如果你和另外两个朋友出去玩,每个人付一部分钱,比如你掏了car rent, 另一个人
付了hotel等等。最后回家了,你们想AA,最后你们每个人付的钱都一样,写个方法能
返回谁应该给谁多少钱
比如三个人分别掏了5,3,1,那么a[2]应该给a[0] 2 刀
如果现在有n个人的话,应该怎么办
写完了之后,大哥问,最需要多少次transaction,一个人给另一个人钱的话算一次,
我心想的是 O(n – 1) 就是 O(n), 大哥说specific answer, 就是 n – 1次
然后Follow up,如果每次transaction特别麻烦,不管是时间还是空间都特别麻烦。如
果不用考虑everything, 不考虑cpu, 不考虑硬盘,我们想让这个次数最少,怎么办。
a****e
发帖数: 9589
2
前部分是个经典题。
后部分不太明白,有例子吗?

办。

【在 a*****a 的大作中提到】
: 如果你和另外两个朋友出去玩,每个人付一部分钱,比如你掏了car rent, 另一个人
: 付了hotel等等。最后回家了,你们想AA,最后你们每个人付的钱都一样,写个方法能
: 返回谁应该给谁多少钱
: 比如三个人分别掏了5,3,1,那么a[2]应该给a[0] 2 刀
: 如果现在有n个人的话,应该怎么办
: 写完了之后,大哥问,最需要多少次transaction,一个人给另一个人钱的话算一次,
: 我心想的是 O(n – 1) 就是 O(n), 大哥说specific answer, 就是 n – 1次
: 然后Follow up,如果每次transaction特别麻烦,不管是时间还是空间都特别麻烦。如
: 果不用考虑everything, 不考虑cpu, 不考虑硬盘,我们想让这个次数最少,怎么办。

T***1
发帖数: 445
3
最少,最少,是零次。如果每个人刚好花的钱时平均数。

办。

【在 a*****a 的大作中提到】
: 如果你和另外两个朋友出去玩,每个人付一部分钱,比如你掏了car rent, 另一个人
: 付了hotel等等。最后回家了,你们想AA,最后你们每个人付的钱都一样,写个方法能
: 返回谁应该给谁多少钱
: 比如三个人分别掏了5,3,1,那么a[2]应该给a[0] 2 刀
: 如果现在有n个人的话,应该怎么办
: 写完了之后,大哥问,最需要多少次transaction,一个人给另一个人钱的话算一次,
: 我心想的是 O(n – 1) 就是 O(n), 大哥说specific answer, 就是 n – 1次
: 然后Follow up,如果每次transaction特别麻烦,不管是时间还是空间都特别麻烦。如
: 果不用考虑everything, 不考虑cpu, 不考虑硬盘,我们想让这个次数最少,怎么办。

p**2
发帖数: 613
4
换了我就说,你丫真抠门,我请客!

办。

【在 a*****a 的大作中提到】
: 如果你和另外两个朋友出去玩,每个人付一部分钱,比如你掏了car rent, 另一个人
: 付了hotel等等。最后回家了,你们想AA,最后你们每个人付的钱都一样,写个方法能
: 返回谁应该给谁多少钱
: 比如三个人分别掏了5,3,1,那么a[2]应该给a[0] 2 刀
: 如果现在有n个人的话,应该怎么办
: 写完了之后,大哥问,最需要多少次transaction,一个人给另一个人钱的话算一次,
: 我心想的是 O(n – 1) 就是 O(n), 大哥说specific answer, 就是 n – 1次
: 然后Follow up,如果每次transaction特别麻烦,不管是时间还是空间都特别麻烦。如
: 果不用考虑everything, 不考虑cpu, 不考虑硬盘,我们想让这个次数最少,怎么办。

m******0
发帖数: 222
5
这个follow up我猜是这个意思:
假设有m个人需要给钱,数目为give[0 ... m-1],然后有n个人需要收钱,数目为
receive[0 ... n-1],(sum(give)=sum(receive))
如果give[i]==receive[j], 那么i给j的钱正好,就是一次交易。如果give[5]=10,
receive[3]=4, receive[8]=6, 那么5要分别给3、8各一次钱,就是2次交易。
现在给定give[]和receive[], 需要求最少交易次数。
想了半天没找到dp的做法,能想到的只有硬搜了,用递归是比较好实现的。有人想到更
好的解法请post。
// 硬搜
int dfs() {
int ans=INT_MAX;
for (int& g : give)
for (int& r : receive)
if (g>0 && r>0) {
int num = min(g,r);
g-=num, r-=num;
ans = min(ans, dfs());
g+=num, r+=num;
}
return ans==INT_MAX ? 0 : ans;
}

办。

【在 a*****a 的大作中提到】
: 如果你和另外两个朋友出去玩,每个人付一部分钱,比如你掏了car rent, 另一个人
: 付了hotel等等。最后回家了,你们想AA,最后你们每个人付的钱都一样,写个方法能
: 返回谁应该给谁多少钱
: 比如三个人分别掏了5,3,1,那么a[2]应该给a[0] 2 刀
: 如果现在有n个人的话,应该怎么办
: 写完了之后,大哥问,最需要多少次transaction,一个人给另一个人钱的话算一次,
: 我心想的是 O(n – 1) 就是 O(n), 大哥说specific answer, 就是 n – 1次
: 然后Follow up,如果每次transaction特别麻烦,不管是时间还是空间都特别麻烦。如
: 果不用考虑everything, 不考虑cpu, 不考虑硬盘,我们想让这个次数最少,怎么办。

a*****a
发帖数: 46
6
后来我认真想了一下,面试官估计希望用bfs来做,每一步无非就是一个人给了另外一
个人一点钱。然后用这些人付出的钱做状态,然后做遍历就好了,到了大家付出的钱一
样的时候就是最少的步骤。
1 (共1页)
进入JobHunting版参与讨论
相关主题
atoi overflow怎么办?str2int中overflow该如何处理?
150上的11.3,用1GByte的memory找出4B整数中的missing one经典题atoi的溢出处理
请教一个题: Median of Two Sorted Arrays问个简单C reverse int
如何判断是否会溢出问个《编程实践》(英文版)里面的问题
问 Facebook Onsite 一题问个越界的问题
onsite完,攒rp系列(二)请教一个题目
问两道bloomberg的题目atoi很不好写,头都大了...
请问如何安全地reverse 一个integer弱弱的问一个问题
相关话题的讨论汇总
话题: int话题: receive话题: ans话题: num话题: give