常考数据结构和算法--JS篇

本文总结基础的数据结构算法题的JS实现:
看需求:
手撕前端基础题,请左拐:

leetcode高频算法题的JS/Python实现,请右拐:


博主正努力学习,抓紧更新中,冲鸭~

数据结构与算法JS实现

  • 前言
    • 一、排序算法
      • 1.1 冒泡
      • 1.2 选择
      • 1.3 插入
      • 1.4 快排(⭐)
      • 1.5 归并
      • 1.6 基数
    • 二、二分查找(⭐)
    • 三、链表相关
      • 3.1 反转单链表
      • 3.2 未排序链表去重
      • 3.3 排序列表去重
      • 3.4 单链表删除节点
      • 3.5 链表partition
      • 3.6 寻找链表倒数第K个节点
      • 3.7 删除列表倒数第N个节点
      • 3.8 判断是否为回文链表
      • 3.9 判断链表是否有环
      • 3.10 环形链表第一个入环节点
      • 3.11 两个链表的第一个公共节点
    • 四、二叉树相关
      • 4.1 前序/中序/后序遍历
      • 4.2 递归非递归
      • 4.3 DFS/BFS
      • 4.4 二叉树深度
      • 4.5 二叉树的最小深度
      • 4.6 判断二叉树是否为平衡二叉树
      • 4.7 树找两(叶子)节点最长距离(相隔最长路径)
      • 4.8 二叉树右视图(左)
      • 4.9 路径总和
    • 五、动态规划
      • 5.1 斐波那契数列
      • 5.2 最长公共子序列LCS
      • 5.3 最长上升子序列
      • 5.4 连续子数组(字串)的最大和
      • 5.5 硬币找零问题
      • 5.6 0-1背包问题
  • 总结


前言

别问,问就是一起卷。(还嫌不够卷吗,/(ㄒoㄒ)/~~)


一、排序算法

1.1 冒泡

1.2 选择

1.3 插入

1.4 快排(⭐)

1.5 归并

1.6 基数

二、二分查找(⭐)

Binary Search :一种非常高效的查找算法,时间复杂度O(logn),解释如下:

常考数据结构和算法--JS篇_第1张图片

// 二分查找得非递归实现
function binary_search(nums,target) {
     
    let left = 0;
    let right = nums.length - 1;
    while (left <= right) {
       //循环退出条件
        mid = left + ((right - left) >> 1); //位运算求中位数
        if (target === nums[mid]) {
     
            return mid
        } else if (target < nums[mid]) {
     
            right = mid - 1
        } else {
     
            left = mid + 1
        }
    }
    return -1
}

//二分查找得递归实现
function binary_research(arr,left,right,key) {
     
    if (left > right) {
     
        return -1
    }
    let mid = left + ((right-left)>>1);
    if(arr[mid] === key){
     
        return mid;
    }else if (arr[mid] > key){
     
        return binary_research(arr,left,mid-1,key)
    }else{
     
        return binary_research(arr,mid+1,right,key)
    }
}

二分查找的局限性:

  • 数组必须有序
  • 数据量太小,顺序遍历即可;数据量太大也不好,二分查找底层依赖数组这周数据结构,需要连续的内存空间。

三、链表相关

3.1 反转单链表

3.2 未排序链表去重

3.3 排序列表去重

3.4 单链表删除节点

3.5 链表partition

3.6 寻找链表倒数第K个节点

3.7 删除列表倒数第N个节点

3.8 判断是否为回文链表

3.9 判断链表是否有环

3.10 环形链表第一个入环节点

3.11 两个链表的第一个公共节点

四、二叉树相关

4.1 前序/中序/后序遍历

4.2 递归非递归

4.3 DFS/BFS

4.4 二叉树深度

4.5 二叉树的最小深度

4.6 判断二叉树是否为平衡二叉树

4.7 树找两(叶子)节点最长距离(相隔最长路径)

4.8 二叉树右视图(左)

4.9 路径总和

五、动态规划

5.1 斐波那契数列

5.2 最长公共子序列LCS

5.3 最长上升子序列

5.4 连续子数组(字串)的最大和

5.5 硬币找零问题

5.6 0-1背包问题

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(面经辑录,数据结构,javascript)