2020-02-26百词斩笔试总结

记第一次参加笔试的过程…


前言

某一天突发奇想打开了我的 Gmail,然后恰好发现了笔试通知…

第一题

给定一个正整数,判断其是否是素数?

个人用简单的 埃拉托斯特尼筛法 解决:

1
2
3
4
5
6
const eratosthenes = number => {
for (let i = 2; i <= Math.floor(Math.sqrt(number)); i++) {
if (number % i === 0) return false;
}
return true;
};

第二题

给定一个序列,如 1 2 3 4 6 7,分别代表星期一、星期二、星期三、星期四、星期六、星期日。其中,1 2 3 4 是连在一起且超过 3 天的,那么就可以将刚刚的序列简化为:1-4 6 7

再如,若给定 5 6 7,则需要输出 5-7

给定的字符串长度就在 1 到 7 之间,且不会出现重复的天数,要求输出简化过的字符串。

这道题提交的源码记得不清了,现在也不能再提交去测 case,就简单的说一下思路吧~

重点就是要找到那些 需要被简化 的序列,我当时维护了两个游标,一前一后,如果日期一直是连着的,那么 a[i] + 1 === a[i + 1]

当出现 跳跃 时,就可以用两个游标的下标差去计算是否连续了超过 3 天,如果超出 3 天了,那么就可以直接简化为 prev-cur,然后重置 prevcur 的地方,继续遍历…

对了,当字符串遍历完了也要检查一遍,就像出现 5 6 7 那样的情况。


第三题

前两题都通过了 100% 的 case,但只有第三题通过了 90.21% 的 case(很难受,直至 1 个小时笔试时间完了都没找出来哪里有问题)

现在假设 a 就是 0,b 就是 1,c 就是 2… z 就是 25,这就是一个 26 进制的数。

输入两个长度不大于 100 的字符串,其分别代表两个符合上述条件(仅包含小写字母)的 26 进制数,求和?并结果也要用这种类型的 26 进制数表示。

比如输入 bazb,那么结果就是 bba。(a 是 0,这个不要记错了!)

个人在写这道题的时候没有什么好一点的办法,就准备暴力推(用 BigInteger 去做高精度计算)。

很奇怪他也不说我超时,而是说我 WA 了?

目前还没有题解,准备尝试用位运算的方式去试一试。

-------------本文结束 Euphoria 在此感谢您的阅读-------------

本文标题:2020-02-26百词斩笔试总结

文章作者:王钦弘

发布时间:2020年02月26日 - 16:36

最后更新:2020年03月01日 - 17:50

原始链接:https://www.wqh4u.cn/2020/02/26/2020-02-26%E7%99%BE%E8%AF%8D%E6%96%A9%E7%AC%94%E8%AF%95%E6%80%BB%E7%BB%93/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

您的支持将鼓励 Euphoria 继续创作!
(如果你还是学生请千万不要打赏!留点钱在学习上啊!)