返回

JS算法笔记:从新手小白到进阶高手

前端

在瞬息万变的科技世界中,掌握算法技能已成为程序员的必备武器。对于初学者而言,力扣(LeetCode)无疑是磨炼算法功力的绝佳平台。本文将提供一份详尽的JS算法视频笔记,帮助你从算法小白蜕变为进阶高手。

认识力扣

力扣是一个在线算法竞赛和学习平台,提供丰富的算法题库和详细的题解。它按照难度将题目分为简单、中等、困难三个等级,涵盖各种算法类型,是初学者磨炼算法技巧的不二之选。

岛屿最大面积

题目解析

岛屿最大面积问题给定一个由 0 和 1 组成的网格,其中 0 表示水,1 表示陆地,要求求出网格中最大的岛屿面积。

JS实现

function maxAreaOfIsland(grid) {
  if (!grid || grid.length === 0) return 0;

  let maxArea = 0;

  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[0].length; j++) {
      if (grid[i][j] === 1) {
        maxArea = Math.max(maxArea, dfs(grid, i, j));
      }
    }
  }

  return maxArea;

  function dfs(grid, i, j) {
    if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] === 0) {
      return 0;
    }

    grid[i][j] = 0;  // 标记该格已访问过

    return 1 + dfs(grid, i - 1, j) + dfs(grid, i + 1, j) + dfs(grid, i, j - 1) + dfs(grid, i, j + 1);
  }
}

总结

通过岛屿最大面积问题,我们学习了深度优先搜索(DFS)算法。DFS是一种递归算法,通过沿着一个分支深入搜索,直到无法深入为止,再回溯到上一层并沿着另一个分支继续搜索。

扩展练习

  • 求两个数字的最大和:给定两个数字,求出它们的最大和。
  • 寻找最长递增子序列:给定一个数组,求出最长的递增子序列长度。
  • 寻找最长公共子串:给定两个字符串,求出它们的最长公共子串长度。

更多力扣算法

简单难度

  • 两数之和
  • 旋转数组中的最小数字
  • 数组中的第K个最大元素
  • 盛最多水的容器

中等难度

  • 寻找峰值
  • 买卖股票的最佳时机
  • 合并两个有序数组
  • 寻找两个正序数组的中位数

困难难度

  • 最长回文子串
  • 最大子数组和
  • 跳跃游戏
  • 单词拆分

成为算法高手

算法刷题是一项长期而艰巨的任务。成为算法高手需要持之以恒的练习和对算法原理的深入理解。以下是提升算法技能的建议:

  • 规律刷题: 制定一个刷题计划,坚持每天刷一定数量的题目。
  • 理解算法原理: 不要只停留在代码层面,深入理解算法的原理和应用场景。
  • 多思考、多总结: 每做完一道题,都要总结自己的解题思路和改进方案。
  • 善用资料: 充分利用网上资源和算法书籍,拓展算法知识。
  • 与他人交流: 加入算法学习群或社区,与他人讨论题目和算法心得。

算法学习之路漫漫,但只要坚持不懈,勤于钻研,你一定能从算法小白进阶为算法高手。