自勉。进步。持续更新。
意向岗位:算法工程师、开发工程师、测试工程师
更新:想了想,觉得自己的论文,还有代码能力,创新能力稍弱,可能主攻开发工程师了
一、面经汇总: 1. 网易、滴滴、爱奇艺、平安科技、新浪 算法面经实习面经分享_笔经面经_牛客网总结一下这几个月的面试吧。这一路走来确实不易。 面经主要公司是:网易+滴滴+爱奇艺+平安科技+新浪 网易 人工智能实习生 一面https://www.nowcoder.com/discuss/155532
2. 深信服、腾讯、字节 开发面经日常实习面经_笔经面经_牛客网日常实习面经 深信服 岗位:C/C++软件开发 一面(65分钟) Linux进程调度算法主要有哪些?(FIFO、RR、CFS) 大多数进程采用哪种调度方式?CFS高优先级进程可以被抢https://www.nowcoder.com/discuss/354773?type=2&order=0&pos=12&page=1
3. C++ 面试基础总结https://github.com/huihut/interviewhttps://github.com/huihut/interview
4. 机器学习面经https://www.nowcoder.com/discuss/681294?type=post&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_post_nctrackhttps://www.nowcoder.com/discuss/681294?type=post&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_post_nctrack
5. 开发工程师面经 秋招总结 | 来听听我秋招放弃算法转向开发的经验历程~_猿生活_牛客网一、序言 作为一名2022届应届硕士毕业生参与了一场惨烈的秋招战斗,所幸本人战斗的结果还可以,最终签约北京美团,岗位是后端开发,现来总结秋招历程,反馈牛客!这里值得注意的是,本人是从算法赛道转到开发https://www.nowcoder.com/discuss/800771?type=post&order=recall&pos=&page=1&ncTraceId=&channel=-1&source_id=search_post_nctrack&gio_id=5CAC797530CD1CD6C46DB34B2C90DF19-1638439541538 6. C++面试总结 C++后台:从实习到秋招的总结(已签腾讯微信)_笔经面经_牛客网这是我实习到秋招的笔记资料 链接: https://pan.baidu.com/s/1p3K6VILrMexeb8ciCRitdQ 提取码:zsu6 虽然内容会因为本人字https://www.nowcoder.com/discuss/586944?type=post&order=jing&pos=&page=2&ncTraceId=&channel=-1&source_id=search_post_nctrack&gio_id=5CAC797530CD1CD6C46DB34B2C90DF19-1638454215367 二、知识点准备: 一些值得参考的链接:C++基础知识大全_clw_18的博客-CSDN博客秋招基本尘埃落定了,打算总结一下C++学习路线的相关知识,今天是第一篇:C++基础知识总结。面向对象的三大特性:1、封装:把客观事物抽象为类,包含自己的属性和方法。2、继承:使用现有类的所有功能,在无需重新编写原有类的情况下对类的功能进行拓展。被继承的类成为父类或基类,继承的类成为子类或派生类。3、多态:一种形式,多种状态,分为静态多态和动态多态。静态多态指编译时多态,如函数重载、模板;动态多态指运行时多态,特指virtual虚函数机制形成的多态。类的访问权限:private、protectedhttps://blog.csdn.net/weixin_49199646/article/details/121066029
三、常见的手撕代码: 1. 二叉树的遍历树的前序遍历、中序遍历、后序遍历详解
参考解法:力扣
这几道题都有一个递归版的解法,类似,难点主要是递归如何实现,怎么理解递归:
对于递归有没有什么好的理解方法? - 知乎
递归解法比较简单:
先序
# 方法一 递归解法 前序后序中序都是相同的套路 class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: def preorder(root: TreeNode): # 结束条件:节点为null,则结束 if not root: return # 遍历根节点 res.append(root.val) # 遍历 preorder(root.left) preorder(root.right) res = list() preorder(root) return res # 时间复杂度:O(n),其中 n 是二叉树的节点数。每一个节点恰好被遍历一次 # 空间复杂度:O(n),为递归过程中栈的开销,平均情况下为 O(log n),最坏情况下树呈现链状,为 O(n)。
中序
# 方法一 递归法 class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: def inorder(root: TreeNode): if not root: return # 先遍历左子树 inorder(root.left) # 根节点 res.append(root.val) # 遍历右子树 inorder(root.right) res = list() inorder(root) return res
后序
# 解法一 递归法 class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: def postorder(root:TreeNode): if not root: return postorder(root.left) postorder(root.right) res.append(root.val) res = list() postorder(root) return res
迭代解法:
递归的时候隐式地维护了一个栈,而在迭代的时候需要显式地将这个栈模拟出来。这个难度比递归要难一些
前序:
# 方法二 迭代解法 # 使用栈来递归 # https://www.bilibili.com/video/BV1dA411L7Mj 这个up讲得太好了!!!一下子明白了 # 1. 初始化栈,将根节点入栈 # 2. 当栈不为空时: # d出栈顶元素 node,并将值添加到结果中; # 如果 node 的右子树非空,将右子树入栈; # 如果 node 的左子树非空,将左子树入栈 class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: # 特例判断 if not root: return # 把根节点压入栈中 stack = [root] # 结果列表 ans = [] # 当栈不为空,也就是树还没遍历完 while stack: # d出栈顶元素 node = stack.pop() ans.append(node.val) # 先把右子树压进去,先进后出 if node.right: stack.append(node.right) if node.left: stack.append(node.left) return ans
中序
# 方法二 迭代法 使用一个固定的模板 class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] ans = [] # 都是要先把根节点压进去 cur, stack = root, [] # 只要当前节点或者栈有一个不是空就继续遍历 while cur or stack: while cur: # cur 入栈 stack.append(cur) # 找到当前最左端的孩子 cur = cur.left # d出栈顶元素 tmp = stack.pop() # 加入结果 ans.append(tmp.val) # d出栈中叶节点的父节点,当左子树完全遍历完就会遍历右子树 cur = tmp.right
后序没搞懂,需要一个pre节点来判断是都遍历??
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)