美团笔试8.22“阔豪”序列计算,小美的数学题

 

对大佬 牛客0X0001号 ac的代码进行讲解:

https://www.nowcoder.com/discuss/715645?source_id=profile_create_nctrack&channel=-1

例如s = '(()))()'

n = len(s)

0:‘(’进入变-1,  stk:[-1]

1: ‘(’进入变-1,stk:[-1, -1]

2:  “)”进入,检查stk最后一位,如果最后一位为-1说明此‘)’需要跟-1代表的“(”匹配  stk:[-1, 2]

3: "("进入 ,stk: [-1, 2, -1]

4 : ")"进入,stk:[-1, 2, 2]

注意这一步:



此步骤为 检测stk后面是否有连续的两个正数,如果有,这两个正数应该“相碰”(相乘), 因为两个正数挨着,说明这两个完整的括号部分挨着,因此必为相乘操作;
stk.size()-2 , stk.size()-1,就是后两位的idx, 相乘之后存在stk.size()-2的位置,因为最后一位需要被pop掉。

此时stk [-1, 4]

5: ")"进入, 由于最后一位不是‘-1’,说明这个右括号“)”肯定有前面未匹配的左括号“(”在等待。

规律:前面未匹配的左括号比为倒数第二位。因为后面可以匹配的正整数已经相互碰撞成了一个新的整数,所以stk最右侧最多只能连续存在一个正整数。如果不信可以自己试试。

因此执行此步骤:

stk[stk.size() - 2] = (1 + stk[stk.size() - 1]) % mod;
stk.pop_back();



此时stk:[5]

6:“(”进入,stk:[5, -1]
7:")"进入,stk:[5, 2]  碰撞相乘 得到[10]

最后输出结果





#美团笔试##笔试题目##美团#
全部评论
第3步不是应该进入‘)’吗?
点赞 回复 分享
发布于 2021-08-22 20:05

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
牛客915519934号:差不多得了 ,真以为我们好忽悠呢?当初就是听了你们的话没有赶上风口入行Java,现在还想再忽悠我呢?这明显就是一个新风口,国家大力发展制造业,以后这个圈子的钱只会越来越多,不管是入门还是大佬,只要进来少说有你一口饭吃,一个个自私自利自己上了车就劝退其他人,钱都让你赚得了呗。就这点东西,入门很容易的,学个pcb,单片机就可以去找工作了,少说一万五起,以后只会越来越高,以后想进阶就去FPGA,linux,给的钱吊打互联网,再说说你们一直说数电模电难?实际呢也不过一个月就能拿下的事情,你不需要学的多深,只需要入门就足够了,就按我说的学出来少说两万起,最好报个培训班,入门更快,兄弟们跟着我冲就完事了,趁着这个机会,狠狠赚他一笔。
点赞 评论 收藏
分享
3 4 评论
分享
牛客网
牛客企业服务