前言
曾在知乎上刷到一个热门问题:程序员需要达到什么水平才能顺利拿到 20k 无压力?
其中有一个最热门的回答:
“无论你是前端还是后端、想进大厂还是拿高薪,算法都一定很重要。”
为什么,算法会如此重要?不瞒各位说,这点我最有发言权,因为我也曾怀疑过,但就在我初入职场时,一位资深前辈对我说过的一段话,让我受用至今:
“我们招人的时候都有一个标准,就是招进来的这个人至少要排到team里面前50%,因为只有这样招进来的人才能够让我们的team更加强大,那怎么评判这个人能够在team里面排到前50%呢?一键获取算法刷题笔记
其实是有很多标准的,比如说算法数据结构就是里边很重要的一部分。
其次,他的逻辑思维能力,系统设计能力,他的职业素养等等,但是算法和数据结构占的比重还是最大的。
要知道程序员这个群体也是有金字塔结构的,如果你连基本的算法和数据结构都不会,那基本上属于比较底层的程序员,比较底层的程序员就意味着比较低的薪酬。“
这也是为什么我总是这么不厌其烦的劝别人好好学算法的原因,因为同样是出售脑力劳动和时间,你就是会比别人少赚,所以请看在钱的份上,不要忽视算法跟数据结构!!!
以下这些大厂必考经典题:
请问,Object作为HashMap的key的话,对Object有什么要求吗?
请问 hashset 存的数是有序的吗?
输入一个二叉树和一个整数,打印出二叉树中节点值的和等于输入整数所有的路径
二叉树的搜索区间
现在有一个单向链表,谈一谈,如何判断链表中是否出现了环
随机链表的复制
找出数组中和为S的一对组合,找出一组就行
数据分析和数据挖掘有什么区别?
集成算法有哪些?分别介绍一下?
哪种模型最好?
什么是贝叶斯定理?朴素贝叶斯朴素在哪里?
哪些算法容易过拟合?如何处理过拟合?
L1、L2正则之间有什么不同?
决策树算法对数据有什么要求?
决策树的整个构建过程?
决策树有哪些特征选择方法?区别是什么?
决策树如何进行剪枝?那种方法好?
集成学习为什么能够提高精度?除此之外还有什么优点?
完整介绍一下Adaboost?
更关注模型的精度还是模型的性能?如何均衡?
深度学习都了解哪些?详细介绍一下?
B+树
快速排序,堆排序,插入排序(其实八大排序算法都应该了解)
栈(stack)一致性Hash算法,一致性Hash算法的应用
插入排序算法
快速排序算法
希尔排序算法
归并排序算法
桶排序算法
基数排序算法
剪枝算法
回溯算法
最短路径算法
最小生成树算法
其中算法,主要是以下几种:
基础技巧:分治、二分、贪心
排序算法:快速排序、归并排序、计数排序
搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
图论:最短路径、最小生成树
动态规划:背包问题、最长子序列
数据结构,主要有如下几种:
数组与链表:单 / 双向链表
栈与队列
哈希表
堆:最大堆 / 最小堆
树与图:最近公共祖先、并查集
字符串:前缀树(字典树) / 后缀树
简单难度
0020.Valid Parentheses
0026.remove-duplicates-from-sorted-array
0088.merge-sorted-array
0104.maximum-depth-of-binary-tree ?
0121.best-time-to-buy-and-sell-stock
0122.best-time-to-buy-and-sell-stock-ii
0125.valid-palindrome ?
0136.single-number
0155.min-stack ?
0167.two-sum-ii-input-array-is-sorted
0172.factorial-trailing-zeroes ?
0169.majority-element
0190.reverse-bits
0191.number-of-1-bits
0198.house-robber
0203.remove-linked-list-elements
0206.reverse-linked-list
0219.contains-duplicate-ii
0226.invert-binary-tree
0263.ugly-number
0283.move-zeroes
0342.power-of-four
0349.intersection-of-two-arrays
0371.sum-of-two-integers
0575.distribute-candies
中等难度
- Add Two Numbers
- Longest Substring Without Repeating Characters
0005.longest-palindromic-substring ?
0011.container-with-most-water
0015.3-sum
- Remove Nth Node From End of List
- Swap Nodes In Pairs
0029.divide-two-integers ?
0039.combination-sum
0040.combination-sum-ii
0046.permutations
0047.permutations-ii
0048.rotate-image ?
0049.group-anagrams ?
0055.jump-game
0056.merge-intervals
0062.unique-paths
0073.set-matrix-zeroes
0075.sort-colors
0078.subsets
0086.partition-list
0090.subsets-ii
0091.decode-ways
0092.reverse-linked-list-ii
0094.binary-tree-inorder-traversal
0098.validate-binary-search-tree ?
0102.binary-tree-level-order-traversal
0103.binary-tree-zigzag-level-order-traversal
0131.palindrome-partitioning ?
0139.word-break
0144.binary-tree-preorder-traversal
0150.eval(238, 238, 238); opacity: 0.6;">
有熟练掌握基础的数据结构与算法,才能对复杂问题迎刃有余。