JS(TS) 中一些常见算法说明、及代码

JS(TS) 中一些常见算法的用途及意义说明,算法对于前端开发来说也是必不可少的一项技能,用对、学好算法有助于高效开发和写出高质量代码、逻辑结构。╮(╯▽╰)╭


一、数组操作

1. 数组去重
  • 用途
    • 提高数据质量:通过去重,确保数据的准确性和可靠性。
    • 减少冗余:减少不必要的存储和处理,提高效率。
    • 简化逻辑:减少对重复数据的处理,使代码更简洁。
2. 数组扁平化
  • 用途
    • 数据处理:简化嵌套数组的处理,便于进一步操作。
    • 数据标准化:将多维数组转换为一维数组,便于统一处理。
    • 简化逻辑:减少嵌套循环,使代码更简洁。

二、排序算法

1. 冒泡排序
  • 用途
    • 教学工具:适合初学者理解排序的基本概念。
    • 简单实现:代码简单易懂,适合快速实现简单的排序需求。
    • 性能限制:时间复杂度为 O(n²),不适合大规模数据集。
2. 快速排序
  • 用途
    • 高效排序:平均时间复杂度为 O(n log n),适合大规模数据集。
    • 分治思想:通过分治法将问题分解为更小的子问题,便于理解和实现。
    • 广泛应用:在许多实际应用中广泛使用,如数据库排序、文件系统排序等。

三、搜索算法

1. 线性搜索
  • 用途
    • 简单实现:代码简单易懂,适合初学者。
    • 适用范围广:适用于未排序数组的搜索。
    • 性能限制:时间复杂度为 O(n),不适合大规模数据集。
2. 二分搜索
  • 用途
    • 高效搜索:时间复杂度为 O(log n),适合已排序数组的搜索。
    • 减少比较次数:通过每次比较将搜索范围减半,提高搜索效率。
    • 广泛应用:在许多实际应用中广泛使用,如数据库索引、文件系统查找等。

四、字符串处理

1. 反转字符串
  • 用途
    • 数据处理:在处理文本数据时,需要反转字符串的场景。
    • 加密解密:在简单的加密解密算法中使用。
    • 字符串操作:在字符串处理任务中,如回文检查等。
2. 检查回文
  • 用途
    • 数据验证:在需要验证字符串是否为回文的场景中使用。
    • 文本处理:在处理和分析文本数据时,检查字符串的对称性。
    • 趣味编程:在编程竞赛和趣味编程任务中,检查回文是一个常见的问题。

五、递归算法

1. 阶乘
  • 用途
    • 数学计算:在数学计算中,阶乘是一个常见的概念。
    • 递归理解:通过阶乘计算,帮助理解递归的基本概念。
    • 组合数学:在排列组合问题中,阶乘是一个重要的工具。
2. 斐波那契数列
  • 用途
    • 递归示例:斐波那契数列是一个经典的递归示例。
    • 数学模型:在数学和计算机科学中,斐波那契数列有许多应用。
    • 性能优化:通过递归实现斐波那契数列,可以学习如何优化递归算法。

六、动态规划

1. 斐波那契数列(动态规划)
  • 用途
    • 性能优化:通过动态规划,避免重复计算,提高算法效率。
    • 复杂问题解决:动态规划是一种强大的算法设计技术,适用于解决复杂问题。
    • 实际应用:在许多实际应用中广泛使用,如背包问题、最长公共子序列等。
2. 最长公共子序列(LCS)
  • 用途
    • 字符串比较:在需要比较两个字符串相似性的场景中使用。
    • 序列分析:在生物信息学、文本处理等领域中,分析序列的相似性。
    • 复杂问题解决:动态规划是一种强大的算法设计技术,适用于解决复杂问题。

七、其他算法

1. 深度优先搜索(DFS)
  • 用途
    • 图遍历:在图和树结构中,深度优先搜索是一种常见的遍历方法。
    • 路径查找:在需要查找路径的场景中使用。
    • 复杂问题解决:适用于解决复杂图论问题,如拓扑排序、连通性检查等。
2. 广度优先搜索(BFS)
  • 用途
    • 图遍历:在图和树结构中,广度优先搜索是一种常见的遍历方法。
    • 最短路径:在需要查找最短路径的场景中使用。
    • 复杂问题解决:适用于解决复杂图论问题,如最短路径、连通性检查等。

以下是 JavaScript和TypeScript 中常见的算法及其实现示例:


一、数组操作

1. 数组去重
  • 使用 Set

    const array: number[] = [1, 2, 2, 3, 4, 4, 5];
    const uniqueArray: number[] = [...new Set(array)];
    console.log(uniqueArray); // [1, 2, 3, 4, 5]
    
  • 使用 filterindexOf

    const array: number[] = [1, 2, 2, 3, 4, 4, 5];
    const uniqueArray: number[] = array.filter((item, index) => array.indexOf(item) === index);
    console.log(uniqueArray); // [1, 2, 3, 4, 5]
    
2. 数组扁平化
  • TS使用递归

    function flattenArray(arr: any[]): any[] {
         
         
      return arr.reduce((acc: any[], val: any) => Array.isArray(val) ? acc.concat(flattenArray(val)) : acc.concat(val), []);
    }
    const nestedArray: any[] = [1, [2, [3, 4], 5]];
    console.log(flattenArray(nestedArray)); // [1, 2, 3, 4, 5]
    
  • TS使用 flat 方法

    const nestedArray: any[] = [1, [2, [3, 4], 5]];
    const flatArray: any[] = nestedArray.flat(Infinity);
    console.log(flatArray); // [1, 2, 3, 4, 5]
    

二、排序算法

1. 冒泡排序
  • TS实现
    function bubbleSort(arr: number[]): number[] {
         
         
      let n = arr.length;
      for (let i = 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香蕉可乐荷包蛋

努力写有用的code

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值