语 言: 【排序】【数组】 【字符串】 【位运算】 【递归】 //学完一门语言就可以做 数 学: 【数学】【脑筋急转弯】 //不需要计算机专业 数据结构: 【链表】【栈、队列】【树】【图】 //需要有数据结构基础 算法思想: 【枚举】【分治】【贪心】【动规】【搜索】 //需要上过算法课 专题总结: 【海量数据】【】
刷题原则: 1. 注重代码质量,每道题不仅仅是能通过就行,要保证是常见的最好的方法。 2. 注重经典方法,常用解法,而不要耍小聪明、另辟蹊径、秀智商的方法。 3. 不做很偏很怪很难的题。目的是找工作,锻炼数据结构、算法思想,不是为了竞赛。 4. 机试的时候就是20分钟一道题,面试的时候就是马上能想出来。懂一万种方法但20分钟写不出来等于不会,不如一种常用方法练熟。
-------------------------------------第0部分:算法理论-------------------------------------------------------------
2. P、NP、NPC和NP-Hard相关概念
-------------------------------------第一部分:语言层次题目-------------------------------------------------------------
排序: 如何使用泛型实现排序算法 经典排序算法实现,包括: 经典 插入排序:插入排序、希尔排序 交换排序:冒泡排序、快速排序 选择排序:选择排序、堆排序 归并排序 基数排序 计数排序 桶排序 一个数组的元素为1~n,在o(n)的时间内对数组排序 ok 典型例题 一个数组,如果两元素之和为奇数,则可以交换。返回任意次交换后,尽可能升序的数组 ok 406 根据身高和序号重新排序 Medium ok o(n)的时间内找到中位数
数组(28题): 例题: 26 删除有序数组中的重复项 ok 练习1:80 删除有序数组中的重复项II ok 练习2:27 删除值等于val的元素 ok 练习3:283 把数组中所有的0元素移动到最后 Easy ok
1、167 数组中找出两个数,和等于给定值 ok 88 合并两个有序数组 Easy ok 238 除自身以外数组的乘积 Medium ok 697 数组的度为数组元素出现的最大次数,返回与数组度相等的子数组的最小长度 Easy ok 565 数组嵌套 Medium ok 665 给定一个数组,最多能改变一个元素的大小,判断该数组能否变成一个非递减数列 Easy ok
//找数 例题1:645 一个数组的元素为1~n,其中一个数被另一个数代替了,找出这两个数 Easy ok 习题1:448 一个数组的元素为1~n,其中若干个数被另外的数代替了,找出这若干个数 Easy ok 习题2:442 一个数组的元素为1~n,其中若干个数被其他数代替了,找出这若干个数被谁替代了 Medium ok 习题3:41 求数组中缺失的第一个正数 Hard ok 例题2:287 一个数组的元素为1~n,其中若干个数被一个数代替了,找出这个数 Medium ok
217 判断数组中是否有重复元素 Easy ok 219
//区间 769 最多能完成排序的块 Medium ok 763 分割字符串,使得相同的字符出现在同一个区间 Medium ok 56 给定n个区间,请合并所有重叠的区间 Medium ok 57 给出n个有序不重叠的区间,插入一个新区间,使整个区间仍有序不重叠 Hard ok 495 游戏,给定攻击序列和攻击持续时间,求攻击有效时间 Medium ok
//二维数组、矩阵 566 实现二维数组的reshape操作 Easy ok 74、240 搜索有序的二维矩阵 Medium ok 378 行递增、列递增的二维矩阵查找第k小的元素 没想明白 766 对角元素相等的矩阵 Easy ok 73 矩阵置零 Medium ok
位运算(11题): 136 数组中其他数都出现了2次,只有一个数出现了一次,找出这个数 ok 137 数组中其他数都出现了3次,只有一个数出现了一次,找出这个数 ok 260 数组中其他数都出现了2次,只有两个数各出现了一次,找出这两个数 ok 268 含有0,1,2,...,n的数组缺少了一个元素,找出这个数 ok 不用额外变量交换两个整数 ok 191 统计二进制数中1的个数 ok 461 求汉明距离 ok 190 反转一个二进制数 Easy ok 693 判断一个数的二进制是不是01交替出现 Easy ok 476 求一个数的补数 Easy ok 318 最大单词长度乘积 Medium ok
字符串(15题): /***反转字符串相关***/ 344 反转字符串 Easy ok 345 反转字符串中的元音字母 Easy ok 151 反转字符串里的单词 Medium ok 字符串循环移位 ok
/***回文串相关***/ 125 给定一个字符串,只考虑字母数字,判断是否为回文字符串 Easy ok 680 给定一个字符串,最多删除一个字符,判断能够构成回文字符串 Easy ok 131、132 分割回文串 Medium 409 给定一些字符,利用这些字符可以构成最长多长的回文串 Easy ok
/***其他***/ 14 最长公共前缀 242 判断两个字符串是否包含完全相同的字符 Easy ok 205 判断两个字符串是否具有相同的结构 Easy ok 字符串循环移位包含 ok 696 给定一个字符串,求有多少个01个数相等的非空子串,其中0和1不能间隔出现 Easy ok 392 给定字符串s和t,判断s是否为t的子序列 Medium ok
/***字典树(Trie、前缀树)***/ 推荐阅读: 从Trie(字典树)谈到后缀树 208 实现Trie,并实现插入字符串、查找字符串、判断是否存在前缀功能 Medium ok 677 实现Trie,求前缀和 Medium ok
/***后缀树***/
【递归】 递归的基本概念 POJ 4147 汉诺塔问题 经典 ok
/****用法一:用递归替代多重循环***/ POJ 2754 N皇后问题(见回溯法)
/****用法二:问题的定义本身就是递归形式的问题****/ POJ 2694 逆波兰表达式 经典 POJ 4132 四则运算表达式求值 Hard ok
---------------------------------------第二部分 数学层次-------------------------------------------------------
数学(22题): /***质数***/ 204 求小于n的质数的个数(埃氏筛法、欧拉筛法) Easy ok 经典
/***最小公约数、最大公倍数***/ 编2.7 求最大公约数 ok 经典
/***进制转换***/ 504 将一个10进制数转换为7进制 Easy ok 405 将数字转换为16进制 Easy ok 168 给定一个正整数,返回它在 Excel 表中相对应的列名称 Easy ok 171 给定一个Excel表格中的列名称,返回其相应的列序号 Easy ok
/***阶乘***/ 172 求n!结尾有多少个0 Easy ok
/***平方数***/ 367 判断一个数是不是一个完全平方数 Easy ok 231、326、342 判断一个数是不是2(3、4)的幂次方 ok
/***两数求和***/ 371 不使用加减运算求两数之和 Easy ok 67 给定两个2进制字符串,求他们的和 Easy ok 典型例题 415 给定两个10进制字符串,求他们的和 Easy ok 习题1 2 给定两个链表,代表两个十进制数,求他们的和(I) Medium ok 习题2 445 给定两个链表,代表两个十进制数,求他们的和(II) Medium ok 习题3 989 给定一个数组和一个数字,其中数组代表一个数字,求这两个数字的和 Easy ok 习题4 66 给定一个数组,代表一个数字。返回这个数加1的结果 Easy ok 习题5
/***排列***/ 667 优美的排列II Medium ok 给定若干个数,问能不能排成一个环,使得每一个数小于左右相邻两数之和
/***最多的数***/ 169 数组中有一个数出现次数超过了一半,找出这个数 Easy ok 例题 经典 229 数组有n个元素,找出其中超过1/3的元素 Medium ok 习题1
/***相遇***/ 453 给定一个长为n的数组,找到让所有元素相等的最小移动次数,其中每次移动可以使n-1个元素增加1 Easy ok 462 给定一个长为n的数组,找到让所有元素相等的最小移动次数,其中每次可以使一个元素加1或减1 Medium 不ok
/***其他***/ 628 找出数组中乘积最大的三个数 Easy ok
9 判断一个整数是不是回文数 Easy ok 7 整数反转 Easy
脑筋急转弯: 292 Nim游戏 Easy ok 纳什均衡之海盗分赃 Easy ok
-----------------------------------第三部分 数据结构层次----------------------------------------------------------
链表(12题): 82、83 删除排序链表中的重复元素 ok 206 反转链表 Easy ok 160 找出两个相交链表的初始交点 Easy ok 141、142 判断链表是否有环,并找到环的入口 ok 经典 21 合并两个有序链表 Easy ok 19 删除链表的倒数第n个结点 Medium ok 24 两两交换链表中的结点 ok 328 奇偶链表 Medium ok 234 判断回文链表 Easy ok 725 分割链表 Medium ok
栈和队列(12题): 232 用栈实现队列功能 Easy ok 225 用队列实现栈功能 Easy ok 155 最小值栈 Easy ok 20 判断括号是否匹配 Easy ok
/***单调栈***/ 单调栈原理:https://endlesslethe.com/monotone-queue-and-stack-tutorial.html 739 给定一个数组,求每个元素右边第一个比它大的元素 Medium ok 典型例题 503 给定一个循环数组,求每个元素右边第一个比它大的元素 Medium ok 习题1 496 给定一个数组,求某些元素右边第一个比它大的元素 Easy ok 习题2 1019 给定一个链表,求每个元素右边第一个比它大的元素 Medium ok 习题3 84 柱状图中的最大矩形 Hard ok 习题4 85 给定一个01矩阵,找出全为1的面积最大的子矩阵 Hard ok 习题5
/***单调队列***/ 239 滑动窗口的最大值 Hard ok 典型例题 队列的最大值 ok
树(29题): 104 求二叉树的最大深度(高度) Easy ok 111 求二叉树的最小深度 Easy ok 226 反转二叉树 Easy ok 617 将一棵二叉树覆盖另一棵二叉树 Easy ok 572 判断一棵二叉树s的子树中,有没有与二叉树t长得一样的 Easy ok 101 判断一棵树是否为对称二叉树 Easy ok 404 求一棵二叉树左叶子节点之和 Easy ok 671 求二叉树中第二小的节点 Easy ok 236 求二叉树的最近公共祖先 Medium ok
112 一棵二叉树,是否存在一条从根到叶节点的路径,使得路径上节点和等于给定数 Easy ok 437 一棵二叉树,问有多少条从上(不一定是根节点)到下(不一定是叶节点)的路径,其中路径上节点和等于给定数 Easy ok
110 判断一棵树是否是平衡二叉树 Easy ok 543 一棵二叉树,返回最长的路径的长度 Easy ok 687 一棵二叉树,返回最长的同值路径的长度 Easy ok
/***层次遍历***/ 637 求二叉树的层平均值 Easy ok 102 二叉树,每一层的节点放到一个列表中 Medium ok 513 找到一棵树最左下角的值 Medium
/***前、中、后遍历***/ 144、145、94 前中后序遍历,及其非递归写法 ok 经典
/***二叉排序树(BST、二叉查找树、二叉搜索树)***/ 669 修剪二叉排序树 Easy ok 230 返回二叉排序树中第K小的元素 Medium ok 538 将二叉排序树的每一个节点都加上比它大的节点的值 Easy ok 235 求二叉排序树的最近公共祖先 Easy ok 108 根据有序数组构造平衡的二叉排序树 Easy ok 109 根据有序链表构造平衡的二叉排序树 Medium ok 653 二叉排序树中,判断是否存在两个节点,和等于给定数 Easy ok 530 二叉排序树中,找出任意两点差的绝对值的最小值 Easy ok 501 给定一棵可以有相同值的二叉排序树,返回树中出现次数最多的元素 Easy ok
图:
海量数据: 教你如何迅速秒杀掉:99%的海量数据处理面试题
--------------------------------------第四部分、算法思想层次------------------------------------------------------------
枚举: POJ 2810 完美立方:给定整数N,找出所有的1<=b<=c<=d<=a<=N,且b^3+c^3+d^3=a^3 Easy ok POJ 4148 生理周期:下一个同时出现体力高峰、感情高峰、智力高峰的时间 Easy ok POJ 2692 称硬币:12枚硬币中有一枚假币,通过三次称的结果判断哪一枚为假币,是轻了还是重了 Medium ok POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭 Hard ok
二分:
分治:
贪心: 原理:贪心法思想 /***活动选择问题***/ 活动选择问题 典型例题 435 无重叠区间 Medium ok 习题1 452 用最少数量的箭引爆气球 Medium ok 习题2
/***其他***/ 455 分发饼干 Easy ok 605 种花问题 Easy ok 圣诞老人的礼物(背包问题) 最优装载问题(01背包的一个子问题)
动态规划: 原理:https://blog.csdn.net/u013309870/article/details/75193592 /***斐波那契数***/ 70 爬楼梯 Easy ok 509 斐波那契数 Easy ok
/***打家劫舍***/ 198 抢劫一条街,不能连续抢两个相邻的商店,求最大收益 Easy ok 213 抢劫环形街道,不能连续抢两个相邻的商店,求最大收益 Medium ok
/***矩阵从左上角走到右下角***/ 64 矩阵从左上角走到右下角,找出一条路径,使得路径上数字总和最小 Medium ok 62 矩阵从左上角走到右下角,共有多少条不同的路径 Midium ok 63 矩阵从左上角走到右下角,某些点不能走,共有多少条不同的路径 Medium ok
/***分割整数***/ 343 将一个正整数拆分为至少两个正整数的和,并使这些数的乘积最大。返回最大乘积。 Medium 未整理完
/***买股票***/ 121 买股票,只允许进行一次交易,求最大收益 Easy ok 123 可以进行2次交易,手上最多只能持有一只股票,求最大收益 Hard ok 122 可以进行任意次交易,手上最多只能持有一只股票,求最大收益 Easy ok
/***其他***/ 303 求数组任意两个区间内元素之和 Easy ok 413 一个数组,找出相邻的若干个元素构成等差数列,共有多少种找法 Medium ok
338 统计0~n这n+1个数,每个数的二进制中有多少个1 Medium ok
5 最长回文子串 Medium ok 典型例题 647 计算一个字符串中回文子串的数目 Medium ok
91 解码方法 Medium ok
专题总结----序列: 594 最长和谐子序列 Easy ok 128 最长连续子序列:给定一个未排序的整数数组,返回最长连续序列的长度 Hard ok 经典 516 最长回文子序列 Medium ok 300、673 最长上升子序列及个数 Medium 经典 不ok,完成贪心和二分再回来写 53 给定一个整数数组,找到一个具有最大和的连续子数组,返回其最大和 Easy ok 376 摆动序列 Medium
七、搜索 1030 矩阵元素按照到某一个元素的距离进行排序
查找: 二分查找法及延伸
0.刷题计划 1.数组:
三角形从上走到下问题:120、
双指针: 双指所有题目汇总,包括:
二分法: 540 有序数组中的单一元素
深度优先搜索
广度优先搜索
回溯法的算法框架 N皇后问题 N皇后(51) N皇后II(52)
子集问题78 子集II(90)
全排列(46) 全排列II(47) 下一个排列(31) 第K个排列(60)
组合总和(39) 组合总和II(40)
------------------------------------------------------------------------------------------------------------------------------------------ 红色:已经解决,可以点。 黑色:待解决,不可点。 空白:无此题目。
其他: 260 268 283 318 328 338 344 345 371 445 461 476 485 524 540 633 680 693 725
来源&感谢:LeetCode、编程之美、数学之美、研究生期间卜东波老师的算法课,北大郭炜老师的算法课、各互联网公司的面试题
|