算法面试题《精选题目+题解分类汇总》

从去年年底开始想准备找实习,于是就开始懒散的复习。

大二学过数据结构,对基本的算法理论和数据结构有过了解,但是感觉又基本都交还给老师了
于是开始零散的复习,在leetcode上按照通过率由高到低开始刷,发现自己连通过率最高的几个题都吃力,几乎每个题都要去看题解然后慢慢消化
刷了十多个题就放弃了,这种盲目的玩法真的太伤自信心了

于是就去看书,先复习下基础,当然就盲目看书还是没学到什么东西

之后又看了慕课网的bobo老师的算法课程,感觉时间不多了就一口气的看完,边看边敲,感觉自己有点进步了,leetcode总共通过了80多个题了

后来,又尝试了去刷《剑指offer》的套题,凭借着题解刷到了40多个题,其他的题看着题解都感觉吃力了,于是又放弃了

过年期间懈怠了一下,然后再去做之前通过了的题,感觉还是不会做,原来之前会做都是因为有视频和参考题解的作用

这时才意识到自己的刷题方法有问题只刷一遍是不对的,没有体系的刷是不对的

于是又回到最基础的知识点,选择按类型的反复刷,不强求每个类型刷多少个题,但一定要掌握知识点,每个题至少做五遍,保证不看题解和原来的代码自己可以凭借理解一步步写出代码

于是,我就开始高频考题优质代码的整理和刷题,参考《极客时间-算法训练营》的题目和cyc2018大佬的复习笔记中的高频题目开始整理自己的复习笔记,笔记内容都放在我的专栏《leetcode精选题集》
我刷题的步骤可以总结如下:

  1. 复习某个知识点理论知识
  2. 寻找某个知识点相关的高频题(5-10个)
  3. 开始刷题,先自己想解题思路
  4. 开始看leetcode中文站与该知识点相关的题解,写出第一版代码
  5. leetcode全球站查看高赞题解(看全球站只需要将中文站的网址leetcode-cn.com改为leetcode.com,其他的路径都是一致的)
  6. 然后写出自己觉得最容易理解且效率较优的代码
  7. 每个知识点刷两三个题之后就先不要看题解,自己先做,做不出来再看题解
  8. 将每个知识点对应的题目和自己能很容易理解的代码整理成文档,空闲时间可以看一看
  9. 然后定期的反复刷专题,每次针对同一个知识点进行刷题

针对题目的选择较为优化的代码,大家可以参考下我的专栏,我的代码全部是由Java编写的,且代码都是学习了大量题解后整理的较优的,如果有些题找不到较好的Java题解可以作为参考。

我对刷算法题的认知就:听再说的老师讲课不如自己去刷自己去理解,前前后后听了3套网上的面试算法题课程,老师都讲的特别好,但是自己动手较少,一写代码就不会,所以和我曾经一样算法一写就不会的可以尝试着按专题来逐个攻破

我刷题的目录整理如下,想体系化刷题的同学可以参考这个路径(标题链接我的专题文章,题目链接leetcode中文站题目)

  • 数组与矩阵

    • 移动零
    • 盛最多水的容器
    • 爬楼梯
    • 两数之和
    • *三数之和
    • 删除排序数组中的重复项
    • 旋转数组
    • 合并两个有序数组
    • 加一
    • *重塑矩阵
    • 最大连续一的个数
    • 搜索二维矩阵II
    • *有序矩阵中第K小的元素
    • *寻找重复数
  • 链表

    • 环形链表
    • 环形链表II
    • 合并两个有序链表
    • 反转链表
    • 两两交换链表中的节点
    • *相交链表
    • 删除排序链表中的重复元素
    • 删除链表的倒数第N个节点
    • 两数相加II
    • 回文链表
    • *奇偶链表
    • *分割链表
  • 栈和队列

    • 有效的括号
    • 最小栈
    • 用栈实现队列
    • 用队列实现栈
    • 柱形图中的最大面积
    • 接雨水
    • 每日温度
    • 下一个更大元素II
  • 哈希表

    • 有效的字母异位词
    • 字母异位词分组
    • 存在重复元素
    • 最长和谐子序列
    • 最长连续序列
  • 树的遍历

    • 二叉树的中序遍历
    • 二叉树的前序遍历
    • 二叉树的后序遍历
    • 二叉树的层次遍历
    • N叉树的前序遍历
    • N叉树的后序遍历
    • N叉树的层次遍历
  • 递归

    • 括号生成
    • 验证二叉搜索树
    • 二叉树的最大高度
    • 二叉树的最小深度
    • 翻转二叉树
    • 二叉搜索树的最近公共祖先
    • 二叉树的最近公共祖先
    • 从前序与中序遍历序列构造二叉树
    • 从中序与后序遍历序列构造二叉树
  • 分治与回溯

    • Pow(x,n)(分治)
    • 为运算表达式设计优先级(分治)
    • 子集(回溯)
    • 子集II(回溯)
    • 电话号码的字母组合(回溯)
    • 单词搜索(回溯)
    • 组合(回溯)
    • 组合总和(回溯)
    • 组合总和II(回溯)
    • 组合总和III(回溯)
    • 全排列(回溯)
    • 全排列II(回溯)
    • N皇后(回溯)
  • DFS和BFS

    • 二叉树的层次遍历
    • 括号生成
    • 在每个树行中找最大值
    • 岛屿数量
    • 岛屿的最大面积
    • 被围绕的区域
    • 单词接龙
  • 双指针专题

    • 167.两数之和II-输入有序数组(头尾指针)
    • 633.平方数之和(头尾指针)
    • 345.反转字符串中的元音字母(头尾指针)
    • 680.验证回文字符串Ⅱ(头尾指针)
    • 88.合并两个有序数组(异步指针)
    • 21.合并两个有序链表(异步指针)
    • 141.环形链表(快慢指针)
    • 142.环形链表II(快慢指针)
    • 19.删除链表的倒数第N个节点(快慢指针)
    • 234.回文链表(快慢指针)
  • 贪心算法

    • 860.柠檬水找零
    • 455.分发饼干
    • 121.买卖股票的最佳时机
    • 122.买卖股票的最佳时机II
    • 55.跳跃游戏
    • 45.跳跃游戏 II
    • 435.无重叠区间
    • 452.用最少数量的箭引爆气球
    • 406.根据身高重建队列
    • 605.种花问题
    • 392.判断子序列
    • 665.非递减数列
    • 53.最大子序和
    • 763.划分字母区间
  • 二叉树的递归

    • 普通二叉树
      • 104.二叉树的最大深度
      • 111.二叉树的最小深度
      • 110.平衡二叉树
      • 543.二叉树的直径(两节点最大路径)
      • 687.最长同值路径
      • 226.翻转二叉树
      • 101.对称二叉树
      • 617.合并二叉树
      • 112.路径总和
      • 437.路径总和III
      • 572.另一个树的子树
      • 404.左叶子之和
      • 337.打家劫舍III
      • 671.二叉树中第二小的节点
    • BST
      • 669.修剪二叉搜索树
      • 230.二叉搜索树中第K小的元素
      • 538.把二叉搜索树转换为累加树
      • 235.二叉搜索树的最近公共祖先
      • 98.验证二叉搜索树
      • 108.将有序数组转换为二叉搜索树
      • 109.有序链表转换二叉搜索树
      • 653.两数之和IV-输入BST
      • 530.二叉搜索树的最小绝对差
      • 501.二叉搜索树中的众数
  • 二分查找

    • 69.x的平方根
    • 367.有效的完全平方数
    • 33.搜索旋转排序数组
    • 74.搜索二维矩阵
    • 153.寻找旋转排序数组中的最小值
    • 744.寻找比目标字母大的最小字母
    • 540.有序数组中的单一元素
    • 278.第一个错误的版本
    • 34.在排序数组中查找元素的第一个和最后一个位置
  • 位运算

    • 191.位1的个数
    • 231.2的幂
    • 342.4的幂
    • 190.颠倒二进制位
    • 338.比特位计数
    • 461.汉明距离
    • 136.只出现一次的数字
    • 260.只出现一次的数字III
    • 268.缺失数字
    • 面试题16.01.交换数字
    • 693.交替位二进制数
    • 476.数字的补数
    • 371.两整数之和
    • 318.最大单词长度乘积
  • 动态规划

    • 斐波拉契数组变形系列
      • 70.爬楼梯
      • 322.零钱兑换
    • 不同路径系列
      • 62.不同路径
      • 63.不同路径II
      • 120.三角形最小路径和
      • 64.最小路径和
    • 子序列系列
      • 53.最大子序和(子序列最大和)
      • 152.乘积最大子数组(子序列最大积)
      • 1143.最长公共子序列(子序列最大公共序列)
    • 打家劫舍系列
      • 198.打家劫舍
      • 213.打家劫舍II
      • 337.打家劫舍III
    • 买卖股票系列
      • 121.买卖股票的最佳时机
      • 122.买卖股票的最佳时机II
      • 123.买卖股票的最佳时机III
      • 188.买卖股票的最佳时机IV
      • 309.最佳买卖股票时机含冷冻期
      • 714.买卖股票的最佳时机含手续费

我的专栏《leetcode精选题集》会一直更新,有好的建议欢迎大家在下方留言

更新时间:2020年3月31日09:43:33

你可能感兴趣的:(#,leetcode分类题集,算法,二叉树,数据结构,java,面试)