LeetCode刷题汇总 - top100及高频面试题

引言

最近两三周都没有更新博客了,主要是因为平常工作比较忙,那么从今天开始我就要重新开始更新博客,在没更新的这段时间里面,我当然也是没有停止学习,主要是平常练练力扣的高频面试题。
当然这些高频题只是算法很小的一部分,我们需要学习里面的思想,从而去解决更多的问题,那么这一篇博客就给大家介绍一下我刷题的思路:

  1. 首先是学习各个数据类型的基础题,通过基础题我们可以更好的了解各类数据类型
  2. 学习一些解决算法题的思想,比如分治、动态规划、递归等等,这些在考题中也是重要的一部分
  3. 总和运用所学知识,去解决一些中等或者困难题

那么废话不多说,看看我力扣的刷题目录吧,希望能给大家提供一些帮助

数组

  • 合并两个有序数组 - 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. 当前元素小于等于基准数,分割指示器+1
      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

你可能感兴趣的:(leetcode,数据结构,算法)