小小前端目标刷够 LeetCode 热门100 + 剑指 Offer 题目,附上简单的答题思路
根据题目的解法或者数据结构分类,可能存在同一题目,多个不同的分类情况
- 数据结构
- String 字符串
- Array 数组
- Tree 二叉树
- Stack 栈
- List 链表
- Queue 队列
- Hash 哈希表
- 算法分类
- 递归
- DFS 深度优先遍历
- BFS 广度优先遍历
- 回溯
- 分治
- 贪心算法
- 动态规划
- 记忆化搜索
- 线性DP
- 背包DP
- 位运算
- 排序
- 递归
128 / 175
已经通过的题目:128
提交未通过的题目 4
未完成的题目:47
尝试过没有成功 12
Simple 简单
-
String
- freqAlphabets 解码字母到整数映射 fromCharCode charCodeAt 互相转化
- generateTheString 生成每种字符都是奇数个的字符串
- reverseLeftWords 左旋转字符串
- strStr 实现 strStr()
- reverseString 反转字符串
- reverseWords 反转字符串中的单词 Ⅲ
- titleToNumber Excel 表序列号
- toLowerCase 转换成小写字母
- defangIPaddr IP 地址无效化
- replaceSpace 替换空格
- removeOuterParentheses 删除最外层的括号 复杂题目值得参考
- sortString 上升下降字符串 使用字典排序 sort((a, b) => a.charCodeAt() - b.charCodeAt()) 有参考价值
-
Maths
- isPalindrome 回文数字
- numberOfSteps 将数字变成 0 的次数
- distributeCandies 分糖果
- reverse 整数反转
- twoSum 两数之和
- numJewelsInStones 统计位数为偶数的数字
- judgeCircle 机器人是否返回到原点
- findComplement 数字的补数
- canWinNim Nim game
- subtractProductAndSum 证书的各位积和之差
- findNumbers 统计位数为偶数的数字
- printNumbers 打印从 1 到最大的 n 位数
- minCount 拿硬币
- hammingDistance 汉明的距离 值得参考 布克尼根运算法
- maximum69Number 6 和 9 的最大数字组合
- minStartValue 求和得到的正数的最小值
- isHappy 快乐数 利用数组存起来猜测的数字 如果形成闭环 退出循环
-
Array
- peakIndexInMountainArray 山脉数组的峰顶索引
- removeDuplicates 删除数组的重复项
- flipAndInvertImage 翻转图像
- containsDuplicate 存在重复的元素
- uniqueMorseRepresentations 唯一摩斯密码
- islandPerimeter 岛屿的周长
- findSpecialInteger 找出数组中出现次数最多的数组
- tictactoe 找出井字棋的获胜者
- game 猜数字
- smallerNumbersThanCurrent 有多少小于当前数字的数字
- createTargetArray 按既定顺序创建目标数组
- createTargetArray 按既定顺序创建目标数组
- decompressRLElist 解压缩编码列表
- minTimeToVisitAllPoints 访问所有点的最小时间
- countNegatives 统计有序矩阵中的负数
- distanceBetweenBusStops 公交站间的距离
- replaceElements 将每个元素替换为右侧最大的元素
- findTheDistanceValue 两个数组之间的距离值
- isUnique 判断字符串是否唯一
- RecentCounter 最近的请求次数 不太明白题目的意思 抄答案了
- oddCells 奇数值单元格的数目
- heightChecker 高度检查器 参考价值
- arrayPairSum 数组拆分
- luckyNumbers 幸运数字
- singleNumber 只出现一次的数字
- majorityElement 多数元素
- moveZeroes 移动零
- findDisappearedNumbers 找到数组中消失的数字 空间时间控制 在 O(n)
- twoCitySchedCost 两地调度
- findMaxConsecutiveOnes 最大连续 1 的个数
- runningSum 一维数组的动态和 循环递归
-
Sql
-
ListNode
-
Tree
- kthLargest 二叉搜索树的最大 K 节点 看答案的
- mergeTrees 合并二叉树 二叉树思路 原始函数的递归进行 参数是提示 进来先判断 然后走逻辑 最后返回节点
- mirrorTree 二叉树镜像 二叉树一般使用递归
- rangeSumBST 搜索二叉树 二叉树需要 再学习一下 递归的思想
- invertTree 翻转二叉树 记住二叉树一般使用递归的方法
- constructMaximumBinaryTree 最大二叉树 leetcode 对二叉树支持不好 bug 多
- maxDepth 二叉树的深度
- sortedArrayToBST 最小高度树 看答案的
- convertBST 把二叉树搜索树转换成累加树 回溯算法
- isSymmetric 对称二叉树
-
Object 面向对象编程
-
动态规划
- fib 斐波那契数 斐波那契数
- coinChange 零钱兑换 零钱兑换
- change 零钱问题2
- rob 打家劫舍 经典动态规划
- rob2 打家劫舍 II 房子围一圈
- climbStairs 爬楼梯 爬楼梯总共有多少种可能
- maxProfit 买股票的最佳时机 只能购买卖出1次
- maxProfit2 买卖股票的最佳时机 II 可以购买卖出多次,但是不能多线操作
- maxProfit3 买卖股票的最佳时机 III 可以同时做两笔交易
- maxProfit4 买卖股票的最佳时机 IV 可以做K次交易 算法是相同的
- maxProfit5 最佳买卖股票时机含冷冻期 只能做一次交易 卖出股票以后第二天不能再买入股票
- maxProfit6 买卖股票的最佳时机含手续费 买股票的最佳时机会 并且需要手续费
- lengthOfLIS 最长上升子序列 二分查找法 动态规划经典算法
- maxSubArray 最大子序和 最大子数组
- canPartition 分割等和子集合
- minDistance 编辑距离 太难了 未解决
Normal 中等难度
- Normal
- maxIncreaseKeepingSkyline 保持城市的天际线
- TinyURL TinyURL 的加密与解密
- sumNums 求 1+2+...n
- reverseWords 翻转字符串里的单词
- canCompleteCircuit 加油站 一次循环最优解
- 换位置 mysql 语法学习 list
- pow Pow(x, n) 实现 pow 方法
- mergeTwoList 合并两个链表 合并两个链表
- numIslands 岛屿的数量 推荐的算法
- rightSideView 二叉树的右视图
- subsets 子集 循环递归方法
- permute 全排列 dfs 算法 深度优先算法 广度优先算法
- generateParenthesis 括号生成
- inOrderTraversal 二叉树中序遍历
- maxArea 盛最多水的容器
- levelOrder 二叉树的层序遍历
- restoreIpAddresses 复原 IP 地址
Difficult
+ Array
- 暂无👍
算法题类型 | 解法思路 | 原因 |
---|---|---|
String | 正则表达式 转化成数组判断 效率低 | 正则匹配难度大 转化是数组判断效率低下 数据类型转换浪费性能 |
Maths | 基础数学方法 | 数学逻辑解题方法 (包含 字符串数组的解题思路) 阅读理解 |
Array | 二分法查找(递归) 排序 去重 嵌套循环(暴力解题) 循环递归嵌套 合理使用 Array.API | 考虑时间和空间复杂度 嵌套循环的时间复杂度是 O(n^2) 优化方向是使用 O(1)的复杂度实现 O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!) |
Tree | 递归 dfs(深度优先遍历) bfs(广度优先遍历) | 二叉树的数据结构适合使用递归 常见树的层次遍历有 DFS 和 BFS 两种方法 |
Object 面向对象编程 | 业务向 | 阅读理解题目 |
ListNode | 递归 双指针 | 不熟悉递归算法 无应用 |
Sql | mySql 语法糖 | 目前碰到的题目不算太难 |
递归的是人,迭代的是神。
递归二叉树,一般操作
深度遍历二叉树,不会的操作 dfs 配合栈一起使用