拼多多5.9笔试个人题解
4/4。
我目前0 offer,只有两个在走流程,拼多多是其中一个。反正到时候可能也挂性格测评或某个面试,现在也没几个HC,也不奢求了。
在某个评论区简单写了写题解,这里发一个全的。
1、汉堡一个10块,拼x个人可以降价到10-x,x<=5。贪心地从拼5个开始拼,5个不够就拼4个,一次类推直到拼0个也就是原价买汉堡。数据范围很小可以暴力地进行每一步的决策。细节点:注意人够但是钱不够的情况或者反过来。
2、给一个01串,每一次可以交换相邻两个,最多交换k次,求最小的一个值:1001的值是10+00+01=11。首先注意到中间的交换不影响结果,即 A01B 和 A10B 对结果没有任何区别。只有两侧的0变成1会有区别,比如右侧 X10 变成 X01 结果会减去10,而左侧 01X 变成 10X 结果会减去1。这样贪心地把右边一个1拉到最右侧,如果还有剩的,就把左边的另一个1拉到最左侧。细节点:这两个1不能是同一个,其次特判01这样的短字符串。
其余见评论区。
我目前0 offer,只有两个在走流程,拼多多是其中一个。反正到时候可能也挂性格测评或某个面试,现在也没几个HC,也不奢求了。
在某个评论区简单写了写题解,这里发一个全的。
1、汉堡一个10块,拼x个人可以降价到10-x,x<=5。贪心地从拼5个开始拼,5个不够就拼4个,一次类推直到拼0个也就是原价买汉堡。数据范围很小可以暴力地进行每一步的决策。细节点:注意人够但是钱不够的情况或者反过来。
2、给一个01串,每一次可以交换相邻两个,最多交换k次,求最小的一个值:1001的值是10+00+01=11。首先注意到中间的交换不影响结果,即 A01B 和 A10B 对结果没有任何区别。只有两侧的0变成1会有区别,比如右侧 X10 变成 X01 结果会减去10,而左侧 01X 变成 10X 结果会减去1。这样贪心地把右边一个1拉到最右侧,如果还有剩的,就把左边的另一个1拉到最左侧。细节点:这两个1不能是同一个,其次特判01这样的短字符串。
其余见评论区。
全部评论
3、给一个由大小写字母组成的字符串,每次删除一个最长的且最左侧的一个连续子串(需要由相同字母构成),求最小删除次数。模拟题,暴力模拟是O(n^2),据说这题暴力是可以AC的。一种低复杂度解法是把连续的部分组织成链表,比如aBBa变成 (a, 1) -> (B, 2) -> (a, 1) 这样,链表的好处是可以很快地删除并且合并两个端点。现在问题就是怎么找最长的那一个部分(比如之前的例子就是(B, 2))。可以考虑用线段树维护最大值,然后通过二分的形式把最大且最左的那一个部分给找出来。找出来之后更新链表,然后同时更新线段树。复杂度O(nlog^2n)。
4、给一个正整数组成的列表,找出一个长度不小于m的子段使得其中平均值最大。暴力据说可以骗不少分。首先区间和转前缀和,设前缀和为S[i],那么平均值就是(S[r] - S[l]) / (r - l)。给定一个平均值k,另(S[r] - S[l]) / (r - l) >= k 则有 S[r]-kr >= S[l]-kl。这样给定k,我们可以很快地找出满足上式成立的最大区间长度 t=r-l,而t关于k是单调的。这样二分答案k,然后对于每一个k找出这个t,如果t<m说明k找大了,就二分左半区间,否则二分右半区间。由于这个找t的过程需要算一个前缀最小值并且在其中二分,复杂度就是O(nlog^2n)。
大佬牛逼,我只会做汉堡那题
我亲爱的hh,牛逼!😍😍
😭第一题汉堡题我也是贪心的解法,但是爆0了还是不知道为什么
第四题暴力过了90%
牛的
相关推荐
11-17 11:00
东北大学 电气设计工程师 Daydream2:这就和高考一样,大部分东西学了之后完全没用,但可以看出你的学习能力。因为公司进去都会有培训,不需要你真的会工作,只需要你能学习
点赞 评论 收藏
分享
10-25 11:03
上海理工大学 Python 点赞 评论 收藏
分享
阿北Char:什么学校啊?直接放网上骂了吧,本来找工作就很不容易的,这种学校培养出来的就业率不高吧?虽然是很多学校也这样子,但是双一流也不会这样吧,就很不通情达理,那些老师自己都没有去外面实习过工作过一路硕博包分配来教学生就业?而且外地实习请假本来就很正常。
点赞 评论 收藏
分享