算法刷题之一经典算法题

和大多数工作了3,4年的程序员一样,我最近也换了工作。在笔试面试的过程中也刷了一些算法题。从最开始的完全摸不到头脑到后面知道算法是有套路的。

一边跌跌撞撞的刷题,一边看着leetcode上大神的套路总结,最后明白一个道理 题海无涯而吾生有崖。leetcode上2000多道题,想要完全刷完太难了,最好的做法是每一种数据类型的题挑一些经典的看。

那么问题来了,哪些是经典呢?这个问题我也不好回答,就像是问哪些电影你觉得经典?是 肖申克的救赎 还是 阿甘正传。我只能结合我在机试,面试过程中遇到的问题给一个参考答案。

在机试中遇到的算法题:

  1. 两数之和
  2. 爬楼梯
  3. 字母异味词分组
  4. 二维矩阵最大子矩阵和
  5. M个苹果放入N个盘子
  6. 最小路径和
  7. 全排列无重复
  8. 单词接龙
  9. n以内素数

而自己刷过的题目有如下,包含字典列表字符串链表动态规划贪心算法。虽然说在算法很讲究技巧,但是在刷题过程中逐渐认识到对数据结构的基础操作才是真正重要的。就像武侠小说中少林就练最基础的拳脚,就能胜过其他门派花里胡哨的功夫。什么倚天剑屠龙刀,一棍子打翻在地。

字典

  1. 两数之和
  2. 字母异位词分组
  3. 数独
  4. 设计LRU

列表

一维列表

  1. 删除排序数组中的重复项
  2. 移动非0元素到头部
  3. 盛最多水的容器
  4. 长度最小的子数组
  5. 无重复字符的最长子串
  6. 前缀和
  7. 三数之和
  8. 合并区间

二维列表

  1. 二维矩阵最大子矩阵和
  2. 旋转图像
  3. 杨辉三角
  4. 对角线遍历
  5. 矩阵元素查找
  6. 容器盛水

字符串

  1. 实现 strStr() 找到字符串的位置
  2. 最长公共前缀
  3. 最长回文子串
  4. 最长公共子串
  5. 全排列-无重复数字
  6. 全排列-含重复数字
  7. 数组子集
  8. 组合总和-数字无限次数
  9. 组合总和-数字使用一次

  1. 有效括号
  2. 最长有效括号

链表

  1. 链表删除某一个节点
  2. 删除倒数第N个节点
  3. 链表逆序
  4. 回文链表
  5. 判断链表是否有环路
  6. 找出环路链表的入口
  7. 链表排序
  8. 相交链表
  9. 两个连表生成相加链表

  1. 树的最大深度
  2. 验证二叉搜索树
  3. 对称二叉树
  4. 路径总和
  5. 二叉树的序列化与反序列化
  6. 树的公共父节点

  1. 岛屿数量
  2. 单词接龙

动态规划

基础

  1. 爬楼梯
  2. 最大和子数组
  3. 乘积最大子数组
  4. 最长上升子序列
  5. 打家劫舍
  6. 01背包问题
  7. 完全背包
  8. 多重背包
  9. 找零钱

进阶

  1. 最小路径和
  2. 不同路径
  3. 不同路径II
  4. 编辑距离
  5. 完全平方数
  6. 最大正方形
  7. 回文子串
  8. 买卖股票1
  9. 买卖股票2

贪心算法

  1. 发饼干
  2. 合唱团

递归算法

M个苹果放入N个盘子

原文地址:https://www.cnblogs.com/goldsunshine/p/14921222.html