美团笔试题解0819
后端开发,5题100%,欢迎讨论交流
T1 取模不多说
T2 乘号改加号,枚举即可
T3 01串子串权值之和。枚举左端点,然后动态规划:算出当前子串分别以0/1结尾的最小翻转次数,转移即可
T4 数组和重新分布。总和范围小于500,典型的回溯+动态规划,记录index和已分配和即可。Python(图4)这里会超时,吐槽一下,只给cpp(图5)的两倍时间太不公平了
T5 (图6)使众数最多的最少操作次数。首先分为两种情况(数组长设为n):
1. 数组平均值为整数,那么必定可以操作为n个平均数(反证易得),操作次数就是所有数与平均值差的绝对值除以2
2. 数组不能平均分配,那么必定可以操作为n-1个相同的数和一个不同的数。那么牺牲哪个数作为不同的数,能够使得操作最少呢?答案是偏离平均值最多的数,即最大值/最小值。剩下的数就让它们操作至它们的平均值(上/下取整,也可能是四舍五入,我这里来不及证明直接两个分别算了)。
T1 取模不多说
T2 乘号改加号,枚举即可
T3 01串子串权值之和。枚举左端点,然后动态规划:算出当前子串分别以0/1结尾的最小翻转次数,转移即可
T4 数组和重新分布。总和范围小于500,典型的回溯+动态规划,记录index和已分配和即可。Python(图4)这里会超时,吐槽一下,只给cpp(图5)的两倍时间太不公平了
T5 (图6)使众数最多的最少操作次数。首先分为两种情况(数组长设为n):
1. 数组平均值为整数,那么必定可以操作为n个平均数(反证易得),操作次数就是所有数与平均值差的绝对值除以2
2. 数组不能平均分配,那么必定可以操作为n-1个相同的数和一个不同的数。那么牺牲哪个数作为不同的数,能够使得操作最少呢?答案是偏离平均值最多的数,即最大值/最小值。剩下的数就让它们操作至它们的平均值(上/下取整,也可能是四舍五入,我这里来不及证明直接两个分别算了)。
全部评论
第二道我也是这么写的呀,怎么才50%嘞
前四题倒是40分钟全A了,最后一题先暴力30%多,后三分63%,然后你这方法也试过(可能急了,对的还少些,估计哪儿写错了),不停调参还是63%,建议再参加第二次吗,感觉除了acm奖 其他都很拉胯
第四题不用回溯吧,我java的,纯粹dp
如果n等于6给定数组是011556,只要操作一次就能变成111555就直接满足了啊,所以我想了半天😓
lz第五题a了多少啊
同学,阿里控股集团JAVA开发岗投吗?我们和其他业务集团独立招聘,可以多次机会。需要的话,可以联系我。
楼主,第四题cpp解法中回溯的for循环上界为什么这样写,意义是什么,这一块有点不太理解,麻烦你了
又简洁又高效
太强了
能解释下第三题吗楼主
第四题dp[index][cur]的定义是啥
佬好强啊,佬是怎么学算法的,是每天写几道力扣吗
第二题C++改成unsigned long long才过86.67
佬,能帮忙看看为什么这么写测试用例过了,提交是0吗
有大佬可以解答一下吗?按我的理解输出应该是三,但是用楼主这个输出0,难道是我题目理解不对吗
第一题为什么写m if x%m==0 else x%m 会只通过26.6呢
大佬打 acm 吧?
第五题 有问题 比如 1 2 3 4 5 6 不能变成4 4 4 4 4 1吧? 可以通过加1减1变吗 cpu烧了
T5操作到剩下数平均值的±100只有63%,又是不知道哪写挂了
吐了,python做的t4,dp只能53%,想了半天没想到怎么优化,没想到换c++就过了
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享