熬夜肝了这一份来自牛客,LeetCode,剑指 Offer大佬整理的前端常用算法面试题(1)

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        # 动态规划
        res = cur = nums[0]
        for i in range(1, len(nums)):
            cur = max(nums[i], cur + nums[i])
            res = max(res, cur)
        return res

动态规划。时间复杂度O(n), 空间复杂度 O(1)。

7.链表

面试题:反转单向链表
题目需要将一个单向链表反转。思路很简单,使用三个变量分别表示当前节点和当前节点的前后节点,虽然这题很简单,但是却是一道面试常考题

以下是实现该算法的代码

var reverseList = function(head)
 {
  
 	// 判断下变量边界问题
  	if (!head || !head.next) return head 
	// 初始设置为空,因为第一个节点反转后就是尾部,尾部节点指向 null
  	let pre = null
  	let current = head 
  	let next 
  	// 判断当前节点是否为空 
  // 不为空就先获取当前节点的下一节点 
  // 然后把当前节点的 next 设为上一个节点 
  // 然后把 current 设为下一个节点,pre 设为当前节点
  while(current) {
  
  	next = current.next 
  	current.next = pre 
  	pre = current 
  	current = next
 }
  return pre 
 };

8.二叉树的先序,中序,后序遍历

先序遍历表示先访问根节点,然后访问左节点,最后访问右节点。
中序遍历表示先访问左节点,然后访问根节点,最后访问右节点。
后序遍历表示先访问左节点,然后访问右节点,最后访问根节点。

9.递归实现

递归实现相当简单,代码如下

function TreeNode(val) 
{
 
 this.val = val;
 this.left = this.right = null;
}
var traversal = function(root) {
 
 if (root)
 {
  
 // 先序
 console.log(root);
 traversal(root.left);
 // 中序
 // console.log(root); 
 traversal(root.right);
 // 后序
 // console.log(root);
 }
};

10.树的深度

面试题:树的最大深度(题目需要求出一颗二叉树的最大深度)
以下是算法实现

var maxDepth = function(root)
{
 
	if (!root) return 0
	return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
};

11.动态规划

动态规划背后的基本思想非常简单。就是将一个问题拆分为子问题,一般来说这些子问题都是非常相似的,那么我们可以通过只解决一次每个子问题来达到减少计算量的目的。
一旦得出每个子问题的解,就存储该结果以便下次使用。

12.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
在这里插入图片描述

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

以下是实现该算法的代码

function mergeTwoLists(l1, l2) {
 
    if (l1 = null && l2 == null) {
 
        return null;
    }
    if (l1 == null) {
 
        return l2;
    }
    if (l2 == null) {
 
        return l1;
    }
    if (l1.val < l2.val) {
 
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
    } else {
 
        l2.next = mergeTwoLists(l1, l2.next);
        return l2;
    

总结

前端资料汇总

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 框架原理真的深入某一部分具体的代码和实现方式时,要多注意到细节,不要只能写出一个框架。

  • 算法方面很薄弱的,最好多刷一刷,不然影响你的工资和成功率😯

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!
    喜欢这篇文章文章的小伙伴们点赞+转发支持,你们的支持是我最大的动力!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值