引言
最近两三周都没有更新博客了,主要是因为平常工作比较忙,那么从今天开始我就要重新开始更新博客,在没更新的这段时间里面,我当然也是没有停止学习,主要是平常练练力扣的高频面试题。
当然这些高频题只是算法很小的一部分,我们需要学习里面的思想,从而去解决更多的问题,那么这一篇博客就给大家介绍一下我刷题的思路:
- 首先是学习各个数据类型的基础题,通过基础题我们可以更好的了解各类数据类型
- 学习一些解决算法题的思想,比如分治、动态规划、递归等等,这些在考题中也是重要的一部分
- 总和运用所学知识,去解决一些中等或者困难题
那么废话不多说,看看我力扣的刷题目录吧,希望能给大家提供一些帮助
数组
- 合并两个有序数组 - 88
- 移动零 - 283 (快速指针判零)
- 找到数组中消失的数据 - 448
简单链表题
- 合并有序链表 - 21 (递归需要复习)
- 删除有序链表重复元素 - 83 (注意链表next的时机)
- 环形链表 - 141
- 环形链表II - 142
- 相交链表 - 160 (双指针算法更加快,注意用当时元素判断是否为null,不要用next元素)
- 反转链表 - 206 (递归需要复习)
- 链表的中间节点 - 876
- 回文链表 - 234 (绝绝子:中间节点+链表反转)
- 链表中倒数第K个节点 - 剑指22
栈与队列
- 用栈实现队列 - 232 (注意两个栈数据转移前需要判断popStack是否为空)
- 字符串解码 - 394
二叉树
- 前序遍历 - 144
- 中序遍历 - 94
- 后序遍历 - 145 (迭代有难度)
- 对称二叉树 - 101
- 二叉树最大深度 - 104
- 平衡二叉树 - 110
- 翻转二叉树 - 226
排序算法(912)
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
-
- 当前元素小于等于基准数,分割指示器+1
-
- 在上一条的基础上,如果当前元素下标大于分割指示器,当前元素与分割指示器元素交换
-
- 希尔排序
- 分组插入排序
- 堆排序
- 不熟练,需要再练练
- 归并排序
- 先递归到单元素,然后合并左右两个数据(出递归)
- 桶排序
- 计数排序
- 基数排序
二进制
- 只出现一次的数字 - 136
- 比特位计数 - 338
- 汉明距离 - 461
字符串
- 有效的括号 - 20
- 字符串相加 - 415
- 字符 减去 ‘0’(字符0),可以得到当前字符的数值(利用ASII值相减)
- 匹配之BF(Brute Force)算法
- 匹配之BM(Boyer-Moore)算法
- 匹配之KMP(Knuth-Morris-Pratt)算法
动态规划
- 最大子序和 - 53
- 买卖股票的最佳时机 - 121
其他
- 用 Rand7() 实现 Rand10() - 470
进阶
- 多数元素 - 169
- 盛最多水的容器 - 11
- 三数之和 -15
- 去重,需要三段代码逻辑
- 下一个排列 - 31
- 从尾部开始将较小数与较大数交互,较小数后面一定是递减的,只需要反转即可
- 旋转图像 - 48
- 螺旋矩阵 - 54
- 边界问题需要进一步思考
- 跳跃游戏 - 55
- 数组中的第K个最大元素 - 215
- 非常重要
- 前K个高频元素 - 347
- 寻找两个正序数组的中位数 - 4
- 两数相加 - 2
- 删除链表的倒数第N个节点 -19
- 反转链表II -92
- prev、start、next三个节点四次交换即可实现,妙!
- 其中prev和start不会变,next会不断变化
- 重排链表 - 143
- LRU缓存机制 - 146
- 不难但是很重要
- 合并K个升序链表 - 23
- 分治思想很重要
- K个一组翻转链表 -25
- 翻转链表的终极题
进阶2
- 每日温度 - 739
- 柱状图中最大的矩形 - 84
- 基本计算器 - 224
- 验证二叉搜索树 - 98
- 二叉树的层序遍历 - 102
- 遍历(队列)
- 递归()推荐
- 二叉树的锯齿形层序遍历 -103
- 从前序与中序遍历列构造二叉树 - 105
- 二叉树展开为链表 -114
- 二叉树的右视图 - 199
- 实现Trie(前缀树) - 208
- 二叉树的最近公共祖先 - 236
- 面试高频题
- 路径总和III - 437
- 删除二叉搜索树中的节点 - 450
- 把二叉搜索树转换为累加树 - 538
- 二叉树的直径 - 543
- 二叉树中的最大路径和 - 124
进阶3
- 搜索旋转排序数组 -33
- 在排序数组中查找元素的第一个和最后一个位置 -34
- 寻找旋转排序数组中的最小值 -153
- 搜索二位矩阵II -240
- 无重复字符的最长子串 -3
- 高频题,很重要
- 最长回文子串 -5
- 字符串转换整数(atoi) -8
- 反转字符串里的单词 -151
- 比较版本号 -165
- 最小覆盖子串 -76
进阶4
- 电话号码的字母组合 -17
- 括号生成 -22
- 组合总和 -39
- 全排列 -46
- 全排列II -47
- 子集 -78
- 单词搜索 -79
- 跳跃游戏 -55
- 最大子序和 -53
- 根据身高体重建队列 -406
- 任务调度器 -621
进阶5
- 最长回文子串 -5
- 不同路径 -62
- 最小路径和 -64
- 解码方法 -91
- 状态转移公式:f(i) = f(i-1) + f(i-2)
- 乘积最大子数组 -152
- 打家劫舍 -198
- 最长递增子序列 -300
- 最佳买卖股票时机含冷冻期 -309
- 零钱兑换 -322
- 打家劫舍II -337
- 分割等和子集 -416
- 目标和 -494
- 最长重复子数组 -718
- 接雨水 -42