美团笔试题解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%嘞
lz第五题a了多少啊
如果n等于6给定数组是011556,只要操作一次就能变成111555就直接满足了啊,所以我想了半天😓
第四题不用回溯吧,我java的,纯粹dp
前四题倒是40分钟全A了,最后一题先暴力30%多,后三分63%,然后你这方法也试过(可能急了,对的还少些,估计哪儿写错了),不停调参还是63%,建议再参加第二次吗,感觉除了acm奖 其他都很拉胯
t5按照题目描述可不止一个众数吧
第5题,同样的思路,为啥只过了36.6啊
第四第五相同思路,但是java能过测试用例提交过不了
T5差不多思路,我只过了20%
第五题按描述不是可以有多个众数吗?这样的话就你的第五题题解就有问题吧?可以出现2-2-5-5这样的数组不用改变也满足条件呀😂想破脑袋都没想到这个解法,还是题目描述就有问题?
为什么我第五题也是这么想的 然后嘎嘎0%
吐了,python做的t4,dp只能53%,想了半天没想到怎么优化,没想到换c++就过了
T5操作到剩下数平均值的±100只有63%,又是不知道哪写挂了
第五题 有问题 比如 1 2 3 4 5 6 不能变成4 4 4 4 4 1吧? 可以通过加1减1变吗 cpu烧了
大佬打 acm 吧?
第一题为什么写m if x%m==0 else x%m 会只通过26.6呢
有大佬可以解答一下吗?按我的理解输出应该是三,但是用楼主这个输出0,难道是我题目理解不对吗
佬,能帮忙看看为什么这么写测试用例过了,提交是0吗
第二题C++改成unsigned long long才过86.67
佬好强啊,佬是怎么学算法的,是每天写几道力扣吗
相关推荐