快手2面算法题

闲来无事,快手目前面完4轮技术面了,等hr面。想起2轮的时候问了我一道(发红包)题,最后没写出来,这里分享一下。
// 已知,总金额M,总数量N,最大值max,最小值min。求一组整数随机红包?
// 假设M=100,N=10,max=13,min=6
// 思路:循环生成随机数。注意每次的随机数条件。
// (1)条件一:这次生成的红包最大值 <= 总余额 - 剩余红包数*最小值。就是说假设发到第9个红包,此时还剩下18元,那么这个红包最大只能是12元,因为第10个红包最小要有6元。
// (2)条件二:这次生成的红包最小值 >= 总余额 - 剩余红包数*最大值。就是说假设发到第9个红包,此时还剩下20元,那么这个红包最小只能是7元,因为第10个红包最大13元。
// (3)另外要注意,上面两个条件要配合最大值和最小值使用,因为我们调整的范围只能是在MAX-MIN之间。
export function generateRedPacket (M, N, MAX, MIN) {
    const RedPacketArr = new Array(N);
    let max = MAX;
    let min = MIN;
    for (let i = 0; i < N; i++) {
        if (i === N - 1) {
            RedPacketArr[i] = M;
            break;
        }
        min = Math.max(M - (N - i - 1) * MAX, MIN);
        max = Math.min(M - (N - i - 1) * MIN, MAX);
       const money = parseInt(Math.random() * (max - min + 1)) + min;
       RedPacketArr[i] = money;
       M -= money;
    }
    return RedPacketArr;
}
听说快手hc早都发完了?

#快手##面试题目#
全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
白火同学:先说结论,对于一份实习简历来说,整体还是挺不错的,技术深度和广度都到位,找到一份中小厂的实习没啥问题。 再说说能优化的点吧。 1、量化结果,项目中很多工作量化一下结果给面试官的感受会更直观一些,也能体现你对应用该项技术的理解(在众多技术为什么要用它,运行性能或者说开发效率往往是一大考虑指标;而不是说大家做这种功能都用它,所以我用它)。 2、突出亮点,项目中可以从“工作职责”择一些“个人亮点”另写一块,优先去写开发过程中遇到的xx问题,使用xx技术达到xx效果,针对性去写一些疑杂难的功能,能带出你个人思考和解决的过程。
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务