面试流程
- 自我介绍
- 考察基础数据结构和算法
- 算法题的测试
面试题目
- 您了解的排序算法有哪些?
- 这些排序算法是如何实现的?
- 分析一下冒泡排序的时间复杂度?
- 详细说一下冒泡排序通过几轮比较来实现排序的。
- 按照刚才面试官的思路来分析一下快速排序的时间复杂度
- 了解heap内部是如何实现的?构造函数和push函数的时间复杂度是多少?分别详细讲解这两个函数实现了什么,如何得到该时间复杂度?
- 堆一般用于实现优先队列,堆化,构建二叉树的结构。
- 了解链表吗?做的题是算法题吗?刷了几道?
- 通过数组实现一个栈。15分钟✅
- 完成二叉树的层序遍历。15分钟✅
算法代码题目
public class Stack {
public Stack(int length);
public void Push(int value);
public int Pop();
public int Peek();
}
let Stack = function(length){ //先进后出
this.InQueue = new Array();
this.maxLength = length;
this.length = this.InQueue.length;
}
Stack.prototype.push = function(num){
this.InQueue.push(num);
}
Stack.prototype.pop = function(){
return this.InQueue.pop();
}
Stack.prototype.Peek = function(){
// 只是获取值,倒数第一个
return this.InQueue.slice(-1)[0];
}
/**
* 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
* @return {number[][]}
*/
var levelOrder = function(root) {
if(!root) return [];
const nodeQueue = [root];
const result = [];
while(nodeQueue.length){
let len = nodeQueue.length;
let resArr = [];
for(let k = 0; k < len; k++){
let curNode = nodeQueue.shift();
if(!!curNode){
resArr.push(curNode.val);
if(curNode.left) nodeQueue.push(curNode.left);
if(curNode.right) nodeQueue.push(curNode.right);
}
}
result.push(resArr);
}
return result;
};
#社招##前端##面经#