算法目录

语       言: 【排序】【数组】 【字符串】 【位运算】 【递归】            //学完一门语言就可以做

数       学: 【数学】【脑筋急转弯】                                                       //不需要计算机专业

数据结构: 【链表】【栈、队列】【树】【图】                                    //需要有数据结构基础

算法思想: 【枚举】【分治】【贪心】【动规】【搜索】                      //需要上过算法课

专题总结: 【海量数据】【】

 

 

刷题原则:

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
       485  求二进制数组中最多多少个连续的1 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、

 

 

 

双指针:

       双指所有题目汇总,包括:
              633 平方数之和 Easy                          ok
              524 通过删除字母匹配到字典最长单词 Medium      ok

    

 

 

         

 

二分法:

       540 有序数组中的单一元素

 

 

 

深度优先搜索

 

 

 

广度优先搜索

 


 

 

 

 

回溯法的算法框架

      N皇后问题

      N皇后(51)

      N皇后II(52)

 

      子集问题78

      子集II(90)

 

      全排列(46)

      全排列II(47)

      下一个排列(31)

      第K个排列(60)

 

      组合总和(39)

      组合总和II(40)     

      

 

 

------------------------------------------------------------------------------------------------------------------------------------------

红色:已经解决,可以点。

黑色:待解决,不可点。

空白:无此题目。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
101 102 103 104 105 106 107 108 109 100 111 112 113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155         160
  162   164 165 166 167 168 169   171 172 173 174         179  
            187 188 189 190 191             198 199 200
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
241 242                                    

其他:

          260    268    283

          318    328    338    344    345   371

          445    461    476   485

          524    540 

          633    680    693

          725

 

 

来源&感谢:LeetCode、编程之美、数学之美、研究生期间卜东波老师的算法课,北大郭炜老师的算法课、各互联网公司的面试题

 

 

你可能感兴趣的:(7,算法)