年月份算法岗面试题总结
评论有奖:评论区回复 “ 1 ”,领取最新升级版《名企AI面试100题》电子书!!
面试题
**问题 1:**怎么处理数据不平衡
**问题 2:**给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
**问题 3:**连续子数组的最大乘积
**问题 4:**最大子数组
**问题 5:**一个硬币正面概率p 那么抛到第几次抛正面期望
题目解析
问题1:怎么处理数据不平衡
常用于解决数据不平衡的方法:
**欠采样:**从样本较多的类中再抽取,仅保留这些样本点的一部分;
**过采样:**复制少数类中的一些点,以增加其基数;
**生成合成数据:**从少数类创建新的合成点,以增加其基数。
**添加额外特征:**除了重采样外,我们还可以在数据集中添加一个或多个其他特征,使数据集更加丰富,这样我们可能获得更好的准确率结果。
问题2:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
https://leetcode-cn.com/problems/reverse-linked-list/
定义两个节点cur=None和pre=head
改变节点方向让pre的next指向cur,实现一次局部反转
cur和pre向前移动一个位置
循环交换前进,直至pre为空,遍历结束,完成反转,此时cur节点为开始节head;
参考代码:
问题3:连续子数组的最大乘积
https://leetcode-cn.com/problems/maximum-product-subarray/
思路:
遍历数组时计算当前最大值、最小值,不断更新
当前最大值为 ans_max = max(ans_max * nums[i], nums[i])
当前最小值为 ans_min = min(ans_min * nums[i], nums[i])
由于存在负数,那么会导致最大的变最小的,最小的变最大的。
当前最大值为 ans_max = max(ans_min * nums[i], nums[i])
当前最小值为 ans_min = min(ans_max * nums[i], nums[i])
参考代码:
问题4:最大子数组
https://leetcode-cn.com/problems/maximum-subarray/description/
解题思路:
遍历数组,遍历的时候记录两个值:当前子数组的和 tmpSum,最大值res
问题5:一个硬币正面概率p 那么抛到第几次抛正面期望
硬币游戏,如果在连续抛出三次正面之前不要停下来,那么我们总计抛硬币的期望次数是多少
假设期望是x
假设第一抛是反面,那么就浪费了一步,平均一共需要x+1步(概率是1/2)
假设第一抛是正面,在此基础上如果第二抛是反面,又浪费了,平均一共需要x+2步 (概率是1/4)
在此基础上如果第二抛是正面
假设第三抛反面,浪费,平均一共x+3步(概率是1/8)
假设第三抛正面,完成,只用了3步(概率是1/8)
所以x的期望即x=(1/2)(x+1)+(1/4)(x+2)+(1/8)(x+3)+(1/8)*3
解得x=14
**添加微信:julyedufu77,回复 “
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/%E4%BA%92%E8%81%94%E7%BD%91/%E5%B9%B4%E6%9C%88%E4%BB%BD%E7%AE%97%E6%B3%95%E5%B2%97%E9%9D%A2%E8%AF%95%E9%A2%98%E6%80%BB%E7%BB%93/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com