返回
JS算法笔记:从新手小白到进阶高手
前端
2023-12-26 06:24:46
在瞬息万变的科技世界中,掌握算法技能已成为程序员的必备武器。对于初学者而言,力扣(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个最大元素
- 盛最多水的容器
中等难度
- 寻找峰值
- 买卖股票的最佳时机
- 合并两个有序数组
- 寻找两个正序数组的中位数
困难难度
- 最长回文子串
- 最大子数组和
- 跳跃游戏
- 单词拆分
成为算法高手
算法刷题是一项长期而艰巨的任务。成为算法高手需要持之以恒的练习和对算法原理的深入理解。以下是提升算法技能的建议:
- 规律刷题: 制定一个刷题计划,坚持每天刷一定数量的题目。
- 理解算法原理: 不要只停留在代码层面,深入理解算法的原理和应用场景。
- 多思考、多总结: 每做完一道题,都要总结自己的解题思路和改进方案。
- 善用资料: 充分利用网上资源和算法书籍,拓展算法知识。
- 与他人交流: 加入算法学习群或社区,与他人讨论题目和算法心得。
算法学习之路漫漫,但只要坚持不懈,勤于钻研,你一定能从算法小白进阶为算法高手。