代码随想录算法训练营第十八天 ● 513,2024年最新国内一线互联网公司面试题汇总

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

let res = [];
let queue = [root];
while(queue.length){
    let len = queue.length;
    let subRes = [];
    while(len){
        let cur = queue.shift();
        subRes.push(cur.val);
        if(cur.left) queue.push(cur.left);
        if(cur.right) queue.push(cur.right);
        len--;
    }
    res.push(subRes);
}
return res[res.length-1][0];

};


## 112 路径总和


题目链接/文章讲解/视频讲解:https://programmercarl.com/0112.%E8%B7%AF%E5%BE%84%E6%80%BB%E5%92%8C.html  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d2d00947c5e84eb2b4320423027482d9.png)  
 方法一:DFS递归,回溯,不是精简版的递归,体现了回溯思想(先减掉再加上,因为每一次遍历到底,也就是更改了cnt的值,如果这条路径不对,返回去需要更改路径,也就是说要把cnt复原)



/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val=undefined ? 0 : val)
* this.left = (left
=undefined ? null : left)
* this.right = (right=undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {boolean}
*/
var hasPathSum = function(root, targetSum) {
const traversal = (node,cnt) => {
//确定终止条件
//已经是叶子节点,且总和已经为0,则存在路径
if(node.left === null && node.right === null && cnt === 0){
return true;
}
//已经是叶子节点,但总和不为0,则不存在路径
if(node.left === null && node.right === null && cnt !
0){
return false;
}
//单层循环逻辑
if(node.left){
cnt -= node.left.val;
if(traversal(node.left,cnt)) return true;
//回溯思想
cnt += node.left.val;
}
if(node.right){
cnt -= node.right.val;
if(traversal(node.right,cnt)) return true;
cnt += node.right.val;
}
return false;
}
if(root === null) return false;
//注意,这里传入的总和要已经减去根节点的值
return traversal(root,targetSum - root.val);

};


## 113 路径总和Ⅱ


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a94b8f85cd4946a98de6d84a1434120e.png)  
 方法一:递归  
 本题结合了112路径总和和257二叉树的所有路径,更多的是在112的基础上加了一个参数path



/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val=undefined ? 0 : val)
* this.left = (left
=undefined ? null : left)
* this.right = (right=undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {number[][]}
*/
var pathSum = function(root, targetSum) {
// 要遍历整个树找到所有路径,所以递归函数不需要返回值, 与112不同
const res = [];
const travelsal = (node,cnt,path) => {
if(cnt === 0 && node.left === null && node.right === null){
res.push([…path]); //不能写res.push(path),要深拷贝
return;
}
if(cnt !
0 && node.left === null && node.right === null){
return;
}
if(node.left){
path.push(node.left.val);
travelsal(node.left,cnt - node.left.val,path);
path.pop(); //回溯
}
if(node.right){
path.push(node.right.val);
travelsal(node.right,cnt - node.right.val,path);
path.pop(); //回溯
}
return;
}
if(root === null) return [];
//把根节点放进路径
travelsal(root,targetSum - root.val,[root.val]);
return res;

};


## 106 从中序与后序遍历序列构造二叉树


题目链接/文章讲解/视频讲解:https://programmercarl.com/0106.%E4%BB%8E%E4%B8%AD%E5%BA%8F%E4%B8%8E%E5%90%8E%E5%BA%8F%E9%81%8D%E5%8E%86%E5%BA%8F%E5%88%97%E6%9E%84%E9%80%A0%E4%BA%8C%E5%8F%89%E6%A0%91.html  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d3a5ece422cb426b8996c88861f9c6ad.png)  
 **思路:其实思路核心都是要根据后序来知道根节点的值,然后以此来划分左子树的区间和右子树的区间。**  
 方法一:笨猪爆破组的方法,很详细  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6ba974585d6c4d7991b00e2b43f5913a.png)  
 方法一:笨猪爆破组



/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val=undefined ? 0 : val)
* this.left = (left
=undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {number[]} inorder
* @param {number[]} postorder
* @return {TreeNode}
*/
var buildTree = function(inorder, postorder) {
const map = {};
//把inorder数组内的节点值和对应索引先用map存起来,方便找mid的位置
for(let i = 0;i<inorder.length;i++){
map[inorder[i]] = i;
}
const helper = (iStart,iEnd,pStart,pEnd) => {
//指针交错了,返回null节点
if(pStart > pEnd || iStart > iEnd){
return null;
}
//根据后序数组里的最后一个值获取到根节点的值
const rootVal = postorder[pEnd];
//获取到根节点的值在中序数组中的位置,方便划分左子树和右子树
const mid = map[rootVal];
//获取到左子树的节点个数
const leftNodeNum = mid-iStart;
//创建根节点
const root = new TreeNode(rootVal);
//递归构建左子树
root.left = helper(iStart,mid-1,pStart,pStart+leftNodeNum-1);
//递归构建右子树
root.right = helper(mid+1,iEnd,pStart+leftNodeNum,pEnd-1);
return root;

最后

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-8V9Y8vFK-1713230041342)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值