春招曾经开始了。你是不是曾经开始筹备了呢?为了帮忙大家取得更好的 offer,lucifer 开拓了 春招冲冲冲 栏目。
明天咱们的猎物是 钉钉和腾讯。来看看这两家的算法题难度几何吧!
<!– more –>
视频地址:https://www.bilibili.com/vide…
钉钉
- 比拟版本号(力扣题号 165. 比拟版本号)
一次遍历即可,惟一须要留神的是补全再比拟(逻辑补全即可,并不一定须要物理上真的去补全),工夫复杂度 $O(m + n)$,其中 m 和 n 别离为两个版本号的长度
- 随机字符串生成(随机生成一个长度为 8 的字符串,要求只能是小写字母和数字,字母和数字可反复,然而生成的随机字符串不能反复)
随机生成一个长度为 8 的字符并将其存到哈希表中,下次生成后判断是否曾经在哈希表中了。如果存在,阐明之前生成过了,持续生成。留神这种算法存在始终回绝的可能,代码会有限循环。
- 日志上报(实现成果:没有数据不上报,有数据每 100ms 批量上报一次)
保护一个窗口,当窗口内有数据才触发申请批量上传,一个窗口的长度为 100m(可能大于)内的所有申请
腾讯
- 字符串反转
头尾双指针,一直替换两个指针的字符即可。
- 链表的倒数第 k 个数
快慢双指针典型题目。
- 设计求一个数的 n 次开方
典型的二分题目,不会的倡议看下我的二分讲义。我的刷题仓库或者公众号搜 二分 就行。
- LRU 算法
略微有点难度了,这个题很常见,难度不小,倡议刷。我之前写过题解了,间接甩给大家吧 146. LRU 缓存机制
我给了 JS, Go, PHP, Python3 四种语言,有你的菜么?
- 手撕一下,就是一个小车给定坐标地位,和当后面朝方向(NSWE),再输出后退转向状况和前提高数,输入小车的坐标地位和面朝方向。
没啥难度,间接模仿。
- 链表相加
链表和数组实质没有不同,只是具体操作不一样。因而把握链表基本操作就行了。链表基本操作有哪些?须要留神什么?我的链表专题都给大家总结好了,倡议浏览。
- leetcode 1567 乘积为负数的最长子数组长度。
题目是:给你一个整数数组 nums,请你求出乘积为负数的最长子数组的长度。一个数组的子数组是由原数组中零个或者更多个间断数字组成的数组。请你返回乘积为负数的最长子数组长度。
这道题是求 间断的 乘积为负数的 最长 子数组长度。这里须要一个小学常识,两个符号雷同的相乘为负数,两个符号不同的数相乘为正数(先不思考 0)。于是间接应用一维 DP + 一层循环即可。
定义状态 positive[i] 为 nums[i] 结尾的 乘积为负数的最长子数组长度 ,negative[i] 为 nums[i] 结尾的 乘积为正数的最长子数组长度,于是答案就是 max(positive)。
接下来,遍历 nums,对 nums[i] 的不同取值分类探讨即可:
- nums[i] > 0
$$
positive[i]=positive[i−1]+1
$$
$$
negative[i]=\left\{
\begin{aligned}
negative[i-1] + 1 & & negative[i-1] > 0 \\
0 & & negative[i-1] = 0 \\
\end{aligned}
\right.
$$
- nums[i] < 0
$$
negative[i]=positive[i−1]+1
$$
$$
positive[i]=\left\{
\begin{aligned}
negative[i-1] + 1 & & negative[i-1] > 0 \\
0 & & negative[i-1] = 0 \\
\end{aligned}
\right.
$$
- nums[i] == 0
$$
negative[i]=positive[i] = 0
$$
状态定义个别两种套路:
- 应用一个二维数组,定义 dpi 和 定义 dpi
- 应用两个一维数组,定义 dp1[i] 和 dp2[i]
两种形式思路一样,只是实操不一样而已。我集体偏向于第二种。比方股票题,我就喜爱定义一个 buy 和 一个 sell 数组。再比方摆动数组,我就喜爱定义一个 up 和 一个 down 数组。
另外如果题目没有限定间断,则须要两层循环和一维 DP(滚动数组优化)。
总结
我集体感觉算法题难度是中等,都十分惯例,没有什么难以读懂的题目或者冷门常识。
另外我组建了春招群,大家面试遇到不会的题都能够问哦。想进群的可在公众号力扣加加后盾回复春招获取小秘书的微信,通过之后再次回复 春招 入群。
最初祝大家 offer 多多。