26美团笔试题第一、二批前两道题

鼠鼠有幸收到了第四批笔试,明天搞,今天做了下牛客上能找到的一二批,第一二题还可以,第三题一涉及到复杂点树图鼠鼠就不会了。。。

第一题都是思维题,千万不能暴力硬搞,想一下其中数字规律关系很快就能出来。

11.小美的因子数量

小美很喜欢因子数量为奇数的数。现在小芳给了小美一个区间[l,r][l,r],请你帮小美算出区间内有多少个因子数量为奇数的数。

【名词解释】因子:对于正整数xx,如果存在正整数pp 使得xx 能被pp 整除,则称pp 是xx 的因子。例如,1212 的因子有1,2,3,4,6,121,2,3,4,6,12。

解释:数字的因数都是一对一的比如6的因子是1,6 |2,3|偶数 只有完全平方数才是奇数个,所以只要看完全平方数个数就行,怎么看一个区间,先弄出来[1,r]-[1,l-1]的就行,sqrt处理一下就好,记得开long long

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie();
    long long l, r;
    if (cin >> l >> r) {
        long long cnt = sqrt(r);
        long long ans= sqrt(l - 1);
        cout << cnt-an<< "\n";
    }
    return 0;
}

11.无限循环

小美有一个长度为 nn 的数组 {a1,a2,…,an}{a1​,a2​,…,an​},她为了研究这个数组做出了个大胆的决定。现在,将与初始数组完全相同的数组连续拼接到其末尾,共拼接 109109 次。设拼接完成后的新数组记为 a′a′,则新数组的长度为 n×(109+1)n×(109+1),并且对于任意的 n<i≦n×(109+1)n<i≦n×(109+1),都有 ai′=ai−n′ai′​=ai−n′​

请你计算新数组 a′a′ 的最长严格递增子序列的长度,并输出这个长度。

【名词解释】

子序列:从原序列中删除任意个(可以为零、可以为全部)元素后按原相对顺序得到的新序列。

严格递增子序列:子序列中相邻元素的值严格递增,即若子序列为 {b1,b2,…,bk}{b1​,b2​,…,bk​},则对所有 1≦i<k1≦i<k,都有 bi<bi+1bi​<bi+1​

解释:10^9这么多重复串,看最长严格递增子序列,只要看这个子序列里的不重复元素个数就行。因为每次都能从每段拿一个元素出来。11322 取1 2 3 最长就是3

#include <iostream>
#include <vector>
#include <algorithm>
#include<set>
using namespace std;
void solve() {
    int n;
    cin >> n;
    vector<int> a(n);
    set<int>b;
    for (int i = 0; i < n; ++i) {
        cin >> a[i];b.insert(a[i]);
    }
  cout<<b.size()<<'\n';
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie();
    int t;
    if (cin >> t) {
        while (t--) {
            solve();
        }
    }
    return 0;
}  

第二题涉及一些基础算法,但是很难想到,得仔细思考其中关系,贪心构造前缀和差分dp二分

12.超级斐波那契数列

定义超级斐波那契数列如下:给定整数 kk,该序列的前 kk 项均为 11;对于 n>kn>k,第 nn 项为前 kk 项之和,即现给定整数 kk 和查询次数 qq,每次查询一个正整数 xx,请输出该序列的第 xx 项对 109+7109+7 取模后的值。

解释:做一个前缀和运算最后再查询记得mod运算

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MOD = 1e9 + 7;
int main() {
    ios::sync_with_stdio(false);
    cin.tie();
    int k, q;
    if (!(cin >> k >> q)) return 0;
    vector<int> queries(q);
    int max_x = 0;
    for (int i = 0; i < q; ++i) {
        cin >> queries[i];
        if (queries[i] > max_x) {
            max_x = queries[i];
        }
    }
    vector<long long> S(max_x + 1, 0);
    long long current_sum = 0;
    for (int i = 1; i <= max_x; ++i) {
        if (i <= k) {
            S[i] = 1;
            current_sum = (current_sum + 1) % MOD;
        } else {
            S[i] = current_sum;
            current_sum = (current_sum + S[i] - S[i - k] + MOD) % MOD;
        }
    }
    for (int i = 0; i < q; ++i) {
        cout << S[queries[i]] << "\n";
    }
    return 0;
}

12.交换括号

我们称一个括号序列为“平衡的括号序列”,当且仅当满足以下归纳定义:

 1) 空串是平衡的;

 2) 若字符串 AA 是平衡的,则“(A)(A)”是平衡的;

 3) 若字符串 AA 与 BB 均是平衡的,则“ABAB”是平衡的(表示连接)。

例如:括号序列 ()()()() 与 (())(()) 是平衡的;而 )))()(、 (( 不是。

给定一个偶数长度的括号序列 s(仅包含 '(' 与 ')')。你可以进行若干次如下操作:

选择一个位置 i(1≤i<n)i(1≤i<n),交换相邻的两个字符 sisi​ 与 si+1si+1​

请你计算,最少需要进行多少次这样的相邻交换,才能使整个序列变为一个平衡的括号序列。

解释:贪心思想我们可以从左到右遍历这个括号序列,并维护一个变量 b,表示当前“左括号的数量减去右括号的数量”:

遇到 ( 时,b++,遇到 ) 时,b--

在任何一个合法的平衡括号序列中,b 在任何时刻都不能小于 0。如果在某个时刻 b < 0,说明我们遇到了一个“多余”的右括号 ),此时序列是不合法的。为了以最少的相邻交换次数修复这个问题,我们必须从右边最近的地方拿一个左括号 ( 移到当前位置。

为什么是最少交换次数?b< 0 时,意味着当前有 -b 个右括号处于“未匹配”状态等待左括号。当我们继续向右遍历,遇到第一个左括号 ( 时,这个左括号前面其实全部都是未匹配的右括号(因为如果中间有匹配好的括号对,它们内部的 b 为 0,不影响整体结构)。所以,这个左括号想要填补最早的那个空缺,它必须要越过的右括号数量,恰好就是当前的 -b!越过一个字符就需要 1 次交换,因此它贡献的交换次数就是 -b

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void solve() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    long long p = 0;   
    long long b = 0; 
    for (char c : s) {
        if (c == '(') {
            if (b < 0) {
                p += -b;
            }
            b++; 
        } else {
            b--;
        }
    }
    cout << p << "\n";
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie();
    int t;
    if (cin >> t) {
        while (t--) {
            solve();
        }
    }
    return 0;
}

#26届求职交流#
蜀黍面试记录 文章被收录于专栏

记录面试的问题

全部评论
遇到数学题就不会了
点赞 回复 分享
发布于 04-11 20:04 广东
我也收到了明天笔试,不过我才刚学连基础都不会,更别提一堆算法了,我以为我这烂简历投了不会笔试呢
点赞 回复 分享
发布于 04-10 20:58 吉林

相关推荐

拼多多一般多久出结果呢?一面感觉面的依托40分钟面完了。。感觉有点小寄整理一下一面的问题吧也学不进去。(1)门面模式,策略模式、模板方法&nbsp;(因为项目写了!所以这么问的)门面:为复杂多子系统提供统一简洁接口,隐藏内部繁琐流程,降低调用复杂度,让外部只需一个入口就能使用整套功能。策略:&nbsp;定义一系列可互换的算法策略,封装各自逻辑,运行时灵活切换算法,不修改原有业务代码,符合开闭原则。模板方法模式定义算法固定骨架流程,将步骤延迟到子类实现,不改变整体执行顺序,子类只重写具体细节,复用算法结构。(2)策略模式和工厂模式区别&nbsp;(这个问题一直追问我!!&nbsp;我只知道特别浅浅的东西)!!!工厂模式负责造对象,只关心怎么创建实例;策略模式负责用算法,运行时切换不同业务逻辑,工厂管创建,策略管行为。然后&nbsp;追问&nbsp;工厂模式不能做不同策略对象吗?&nbsp;工厂造出策略对象,再交给策略模式去调度使用,二者分工完全不一样&nbsp;然后又追问他们使用场景&nbsp;多个同类对象,创建逻辑复杂多变,不想让业务代码直接&nbsp;new&nbsp;对象,统一封装创建,解耦对象生成与使用。&nbsp;同一业务有多种算法&nbsp;/&nbsp;规则切换,比如支付方式、排序规则、优惠计算,运行时灵活替换业务逻辑。又追问&nbsp;相同点是什么同时他们的区别是什么呢?&nbsp;回答封装变化、都用到了多态,都降低了耦合、都符合开闭原则。不同点&nbsp;一个创建对象一个选择对象怎么去干活的。第一个项目项目学到了说明一下&nbsp;就随便说了一下简历上的东西&nbsp;然后没有追问下面问rpc框架的东西了&nbsp;因为简历有rpc。&nbsp;&nbsp;自研&nbsp;RPC&nbsp;让我掌握TCP&nbsp;粘包解决、动态代理、服务注册发现、负载均衡、SPI&nbsp;扩展(3)&nbsp;问怎么处理粘包!!&nbsp;定消息头&nbsp;+&nbsp;长度域的私有协议,先读头获取长度,再按长度读体。(4)&nbsp;为什么会有粘包的问题:&nbsp;TCP&nbsp;是面向字节流的协议,没有消息边界,发送方批量发、接收方一次性读,就会出现多条数据粘在一起。(5)&nbsp;问我tcp为什么是流式的??&nbsp;我直接蒙蔽了。。。我咋知道!!!TCP&nbsp;是流式的,因为它的设计目标是提供一条可靠、有序、连续的字节管道,而不是独立数据包的传输服务。(6)&nbsp;问我项目设计的&nbsp;协议消息的格式是什么样子的&nbsp;让我写道屏幕上&nbsp;因为确实背了这里写出来了(7)问我&nbsp;message&nbsp;length代表什么意思&nbsp;message&nbsp;length&nbsp;就是消息体的字节长度,告诉接收端要读多少字节才是一条完整消息,是解决&nbsp;TCP&nbsp;粘包半包的核心字段。(8)因为我使用的是recordParser去进行消息的处理然后面试官问我&nbsp;没有被截取的部分怎么处理呢?&nbsp;看了recordParser源码所以答出来了&nbsp;没读完、不完整的字节,我会自动暂存在&nbsp;Vert.x&nbsp;RecordParser&nbsp;内部缓冲区里,不丢弃、不处理,等下一次数据到来继续拼接,直到凑够一整帧才交付(9)jdk动态代理是什么&nbsp;!!(10)jdk动态代理底层是什么&nbsp;运行时动态生成接口代理类字节码&nbsp;→&nbsp;加载进&nbsp;JVM&nbsp;→&nbsp;全部方法统一走&nbsp;invoke&nbsp;()&nbsp;反射调用&nbsp;这里好像我当时说的怎么实现动态代理了因为我不知道底层所以当没听见。。。(11)红黑树和跳表的应用区别&nbsp;redis?红黑树&nbsp;范围查询慢&nbsp;HashMap&nbsp;&nbsp;跳表&nbsp;插入&nbsp;/&nbsp;删除只改指针&nbsp;范围查询极快(12)为什么空间复杂度都是O(N)(13)除了上面还有什么区别吗?&nbsp;我又重复了一遍上面的回答。。。因为确实不知道了。。实现难度不同红黑树:极难,要处理旋转、变色、平衡,代码复杂易错。跳表:简单,只用随机层数&nbsp;+&nbsp;指针调整,代码短、易维护、易扩展。插入&nbsp;/&nbsp;删除稳定性不同红黑树:插入删除可能触发连锁旋转&nbsp;/&nbsp;变色,最坏会有O&nbsp;(logN)&nbsp;次调整,高并发下有抖动。跳表:插入删除只修改前后指针,局部调整,无连锁反应,高并发更稳定。范围查询效率不同红黑树:范围查询要中序遍历,跳转多、缓存不友好,速度慢。跳表:直接在底层连续链表遍历,缓存命中率高,范围查询天生更快。并发场景支持不同红黑树:修改时影响路径多,加锁粒度大,并发性能差。跳表:操作局部化,加锁粒度小,更容易实现无锁&nbsp;/&nbsp;细粒度并发。缓存友好度不同红黑树:节点分散,CPU&nbsp;缓存不友好。跳表:底层是连续链表,缓存命中率更高。(14)&nbsp;又问他们读取的区别是什么呢?读取时会怎么样红黑树读取(查找)从根节点开始,不断左右跳转,走一条从根到叶子的路径节点在内存中不连续,CPU&nbsp;缓存命中率低每次比较都可能缓存未命中,读取速度受影响范围查询需要中序遍历,跳转更多,更慢2.&nbsp;跳表读取(查找)从最高层索引往下跳,快速缩小范围,最后落到底层有序链表底层是连续链表,内存局部性好CPU&nbsp;缓存更友好,连续读取更快范围查询直接遍历底层链表,几乎无跳转,极快(15)&nbsp;最后除了两道算法题1、是leetcode&nbsp;面试150题里面的一个2、实现一个线程安全类&nbsp;然后又add和remove操作!!都写出来!!42分钟差不多就面完了拼多多内推链接:https://careers.pddglobalhr.com/campus/intern?t=vSypT8yAuQ&nbsp;内推码:vSypT8yAuQ
点赞 评论 收藏
分享
04-02 16:40
已编辑
昆明理工大学 算法工程师
先上数据&nbsp;投递&nbsp;32家&nbsp;2月下旬到3月上旬笔试&nbsp;做了15场&nbsp;含测评收到面试&nbsp;4家第一场笔试&nbsp;2月28日第一场面试&nbsp;3月15日笔面间隔&nbsp;15天具体经历2月底那周连着做了三场笔试&nbsp;拼多多&nbsp;美团&nbsp;携程&nbsp;一场接一场&nbsp;做完人都是麻的然后就开始了漫长的等待3月初那几天&nbsp;我每天刷牛客看别人笔试完多久约面&nbsp;有人说三天&nbsp;有人说一周&nbsp;我等到第五天&nbsp;邮箱除了广告啥也没有&nbsp;等到第七天&nbsp;开始怀疑是不是笔试挂了&nbsp;等到第十天&nbsp;已经做好全部石沉大海的准备了3月10号那天心态确实崩了一下&nbsp;15场笔试换不来一场面试&nbsp;说不怀疑自己是假的转折发生在3月15号下午两点我在图书馆刷题&nbsp;手机震了一下&nbsp;看了一眼&nbsp;邮件加短信&nbsp;某中厂&nbsp;做云的&nbsp;base北京&nbsp;约一面看到面试邀请四个字的时候&nbsp;我手抖了一下&nbsp;不是因为激动&nbsp;是等了太久&nbsp;突然来了反而不敢相信&nbsp;我把手机扣在桌上缓了十秒才拿起来仔细看然后3月16&nbsp;17&nbsp;18&nbsp;三天连着来了3家&nbsp;华为&nbsp;荣耀&nbsp;一个小厂&nbsp;就跟公交车似的&nbsp;等半天不来&nbsp;一来来一串笔面间隔时间线&nbsp;给大伙参考中厂A&nbsp;笔试完第5天约面华为&nbsp;笔试完第8天约面&nbsp;性格测评后第3天荣耀&nbsp;笔试完第11天约面小厂&nbsp;笔试完第3天约面一点经验第一&nbsp;笔试完别干等&nbsp;把错题啃透等面试那15天&nbsp;我把笔试做过的题全部过了一遍&nbsp;尤其是编程题没AC的&nbsp;不管是因为边界条件没处理好还是思路卡壳&nbsp;我都重新理了一遍&nbsp;在IDE里跑通才罢休&nbsp;后来面试真的有被问到&nbsp;笔试那道题你当时怎么想的&nbsp;现在有没有更好的解法&nbsp;如果不是提前复盘过&nbsp;现场肯定卡壳第二&nbsp;邮箱和短信都看&nbsp;别漏了我有一家的短信进了拦截&nbsp;邮件没提醒&nbsp;幸亏那几天心里不踏实&nbsp;每天手动翻一遍垃圾箱才发现&nbsp;那家后来面到了二面第三&nbsp;别跟别人比进度&nbsp;没有意义我室友投得比我晚&nbsp;面得比我早&nbsp;那几天看他准备面试我还在等&nbsp;确实难受&nbsp;但后来想明白了&nbsp;每个人投的岗位&nbsp;部门&nbsp;HC情况都不一样&nbsp;别人三天约面不代表你挂了&nbsp;我翻牛客去年的帖子&nbsp;有人笔试完两周才收到面试&nbsp;最后还是拿了offer第四&nbsp;笔试做多了真的有肌肉记忆15场笔试不是白做的&nbsp;到后面&nbsp;选择题的八股套路基本摸清了&nbsp;编程题的输入输出格式也不用反复试了&nbsp;每场能省出10到15分钟给难题&nbsp;最后拿到面试的那几家&nbsp;我推测笔试成绩应该都不差&nbsp;因为面试官在自我介绍时说了句&nbsp;你笔试成绩还不错第五&nbsp;记录每一场的笔试题我建了一个Excel&nbsp;每场笔试完立刻记下考了哪些知识点&nbsp;哪道题没做出来&nbsp;哪个题做得不顺&nbsp;15场记下来&nbsp;发现考得最多的就是动态规划&nbsp;二叉树&nbsp;哈希表&nbsp;后面我就重点刷这几类&nbsp;命中率确实高了转化率供参考15场笔试&nbsp;换&nbsp;4个面试&nbsp;转化率不到百分之27&nbsp;按这个比例&nbsp;如果你做了10场还没动静&nbsp;可能不是你不行&nbsp;是概率还没轮到你&nbsp;再投几家&nbsp;再做几场&nbsp;总会来的最后整理了一个笔试复盘模板&nbsp;需要自取公司名称:拼多多笔试日期:2月28日AC情况:2/3卡壳的题目:第三题动态规划卡壳原因:边界条件没处理好复盘后是否掌握:是祝我们都上!
做完笔试后你收到面试了吗...
点赞 评论 收藏
分享
04-19 01:20
门头沟学院 Java
查看9道真题和解析
点赞 评论 收藏
分享
评论
3
7
分享

创作者周榜

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