拼多多3.23笔试

1.简单的模拟。

2.求给定区间[L, R]范围内有多少个幸运数字。幸运数字是指该数字有任何的子串为3的倍数,包括0。比如8到13,有9,10,12,13四个幸运数字。

考虑到在计算一个数字是否幸运时,每位上的数字都等价于其mod 3。比如15445和12112在是否幸运上是等价的。

那么我现在只有0,1,2三种数字可能出现,而0本身又是3的倍数,所以如果一个数n>99了,那么n一定是幸运数字,因为在三个位置上,0,1,2怎么排都是幸运的。

所以建立一个大小为100的数组,保存i冲0到99,所有的幸运数字个数。这一步因为最多只有两位,所以分别判断个位和十位即可。

当LR区间与99相交时,从中寻找,若L>99,结果一定为R-L+1。

3.数组中,求每一个人后面能看到的人数,这个计数当到达末尾或者看到高度大于等于他本身的人时,会停下。

单调栈从左向右遍历,目的是找到每个元素后面第一个大于等于他本身的元素下标。所以栈应该保存元素下标,且是从栈底到栈顶单调递减的。栈顶top()的元素遇到大于他的nums[i]时,计算一下下标的差值dis存入ans,并不断弹出,每次都把dis存入ans,直到栈顶元素小于等于,或者栈空。

注意最后再对栈进行一遍操作,栈中此时的元素,代表这个位置的人能看到后面所有人。

本题注意用64位整型。size_t一步到位

4.字符串替换。

用set对数组X[i]去个重;

sort整个B字符串;

由小到大遍历set,把A串中(*it)-1的位置的字符,替换为B串中从头开始的字符。

整体上是贪心。

ak

全部评论
约面了吗佬,我这还是待笔试
1 回复 分享
发布于 昨天 14:11 陕西
第三题单调栈为啥60啊
点赞 回复 分享
发布于 03-23 22:35 北京
第二题居然这么做。 我想了一会,觉得幸运数非常多,就深搜非幸运数了,不过也AK了
点赞 回复 分享
发布于 昨天 15:58 广东

相关推荐

评论
4
2
分享

创作者周榜

更多
牛客网
牛客企业服务