抢红包算法 c++_头条的算法面试题:简洁版的最优分单法

昨天,有网友给我抛出了一道算法题,说是一道头条的面试题。

听说,头条的算法是很牛的。我不一定会,所以,发到了群里。没想到大家的热情超出我的预期,很多人给出了思路,还有一些人给出了代码,有 js 实现的,有 Java 实现的,还有 C++ 实现的。

面试题如下:

给定一个数,算出平均值是整数的算法。例如:5 平均 2 份,则结果为,2 和 3;8 平均为 3 份,则为 2,3,3;11 平均 4 份,则为 2,3,3,3。求算法

有人说,这和微信发红包一样,其实完全不一样的。

抢红包的额度是从 0.01 到剩余平均值 * N (N 是一个系数,决定最大的红包值)之间。所以,差别还是挺大的。

网友 A 的 Java 版算法如下:

bc1f20572aaf0875642d850b4a06454b.png

试了一下,运行结果完全正确!

网友 B 的算法思路:

找除数n大约被除数m的最小公倍数p,得最小商x=p/n  ,然后计算除数m有最多a个x,则组合伟x0、x1...xa-1、m-a*x

并且进一步补充道:

比如11 分4份,4大于11的最小公倍数为12,12/4=3 这有最小 3个3,剩下的就是2

(8+1)/3=3 最多有2个3 这组合为 2、3、3

吃瓜群众!

7a7a8ac67192b6e1243a40da947044f7.png

网友 C 的 JavaScript 版算法:

f48485f6c4cfec94d6c58afc45b4e0bd.png

整齐的队列,一排 666 !

网友 D 的 C++ 算法:

3f6c08fc7041efa54702b7cc9c6b52e9.png

还有网友考虑了算法复杂度!

5b7a21d064298d8ca0d0279d1b02a552.png

对于算法我很平庸,一窍不通。最能体现我的,还是马云那句“算了吧”。

2996d1f989d9aa9a972bdcbf9ca29d9a.png

对于懂算法的,这又是一道送分题!

以上,希望能对每个读者有所帮助,如果你想交流技术,请加我微信:xttblog,坑位不多了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值