2020年总结
fcf6d42fef418147bcf48ca76b661251358cd4eaf7c53a65655814e6a9e15a9ec3e267494789dd167a2245e6b6dbcd99e414dfe526c8018ff2acb616324d88ae2c8e5a525ef6129932c352fef8ed829bb056609f83f1eac6075a9d9febf583c2a883169a304431e55259dec5dafe200000e4a33052a8b4399ac42ffd13b6f637670f0b66724417bd6e9bf7306f5983bb704cbf96b65727f72f11d3d777d4c584f4c93c0d353540adcea79ccec04243ee070a0afd578f95f63038d5376321f556fc8642674765d071b4b9175ae0c0af7adc77a411a028957a5be6d1bf0fce083dbf2bae625db929d334642df6ebcb32dcd0b31b9f6eeb90637 ...
全栈 or 专注一个领域
全栈工程师对于需要的知识,记住的只是索引,能够很快地找到需要用到的技术。作为全栈工程师,可以着手任何自己感兴趣的项目,一个人能够完成从零到上线的所有工作。也就是说,成为全栈可以给自己做许多有趣的东西,能更好地利用计算机技术让自己的生活更好,有了想法,就能去实现它。
如果什么都会,那某种程度上也是什么都不会,所以要对自己有清楚地认识,知道自己的优势在哪,自己的技术几斤几两,不要膨胀。当今计算机是一门涵盖很广的学科,其下有无数细分的领域,每家企业也有很细的岗位分布。全栈工程师必须要有一项专精的领域才能在大公司的岗位竞争中胜出。中小公司喜欢全栈因为其性价比高,能为公司节省成本。当下计算机编程的门槛越来越低,社区和现成的库、包越来越多,例如 npm 上面现在有 1,485,541 个包,找到相关的包,引入后随便调用两下,许多复杂的问题就被不明不白地解决了。现在涌入许多低质量的程序员,拿着虚高的薪水,本来计算机工程中不崇尚造轮子,低质量程序员让调包的行为被诟病,有了“调包侠”、“调参工程师”一些词汇。
有一项专精的领域,能在市场竞争中胜出,又有足够的其他领域积累,可以做一些自己喜欢的项目,也能减 ...
搜索组合数
组合总和 III
搜索组合的模板
dfs 函数定义:void dfs(int start, int n, int k);
记录一个 start,意义为当前这个数最小可以从几开始搜。
记录一个 k,意义为当前搜索了几个数。
记录一个 n,意义为当前的总和是多少。
123456789101112131415161718192021222324class Solution { public: vector<vector<int>> ans; vector<int> path; vector<vector<int>> combinationSum3(int k, int n) { dfs(1, n, k); return ans; } void dfs(int start, int n, int k) { if (!n) { if (!k) { ans.push_back(path); } ...
Trie 树
Trie 树是前缀树,可以用于搜索时自动补全提示。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859class Trie { public: struct Node { bool is_end; Node* son[26]; Node() { is_end = false; for (int i = 0; i < 26; i++) { son[i] = NULL; } } } * root; /** Initialize your data structure here. */ Trie() { root = new Node(); } /** Inserts a word into the trie. */ void insert(string ...
拓扑排序
统计所有节点的入度
将所有入度为 0 的点加入队列
BFS,将与入度为 0 的点相连的节点入度减去 1,如果减到 0,该点入队
求是否存在拓扑序:
课程表
原题链接
1234567891011121314151617181920212223242526272829303132class Solution {public: bool canFinish(int n, vector<vector<int>>& edges) { vector<vector<int>> g(n); vector<int> d(n); for(auto& e: edges) { int a = e[0], b = e[1]; g[a].push_back(b); d[b]++; } queue<int> q; for(int i ...
筛质数
线性筛法,保证每个合数,一定会被且只会被最小质因子筛一次。
1234567891011121314151617class Solution {public: int countPrimes(int n) { vector<int> primes; vector<bool> st(n + 1); for (int i = 2; i < n; i ++ ) { if (!st[i]) primes.push_back(i); for (int j = 0; i * primes[j] < n; j ++ ) { st[i * primes[j]] = true; if (i % primes[j] == 0) break; } } return primes.s ...
Flood Fill 算法模板
Flood Fill 算法模板:
12345678910111213141516方向数组dx[4] = {-1, 0, 1, 0}dy[4] = {0, 1, 0, -1}for i=0 to n for j=0 to m if (i, j) 未遍历 则遍历 (i, j)dfs(x, y) 标记(x, y)为已遍历 for (遍历四个方向) 计算将要遍历的下一个格子的坐标 (a, b) if ((a, b)不越界且可以遍历) dfs(a, b)
12345678910111213141516171819202122232425262728class Solution { public: vector<vector<char>> g; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; int numIslands(vector<vector<char>> ...
记录层信息的层序遍历
二叉树层序遍历时可以记录层的信息,关键在于开始遍历之前,先记录一下本层要遍历多少个节点。while 循环第一件事记录本层节点数量,然后用 for 循环遍历这么多次。
12345678910111213141516171819202122232425262728293031/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution { public: vector<int> rightSideView(TreeNode* root) { if (!root) return {}; queue<TreeNode*> q; q.pu ...
经典鸡尾酒
参考
半个青柠檬可以榨汁 15ml
击打摇壶中部可以轻松分离上下两个杯子
金汤力(Gin Tonic)
杯子:柯林杯
原料:黄柠檬、金酒、汤力水
注意:柯林杯加满大块方冰 Stir 30 秒冷却杯子,倒出化水。不用 Shake
柯林杯加三大块方冰 Stir 30 秒,倒出化水
加入金酒 30ml-45ml
半个黄柠檬榨汁
搅拌,让金酒和柠檬汁快速冷却
补满汤力水
吧勺提拉
金菲士(Gin Fizz)
杯子:柯林杯
原料:青柠檬、金酒、糖水、苏打水
注意:柯林杯加满大块方冰 Stir 30 秒冷却杯子,倒出化水。加冰 Shake
柯林杯加满大块方冰 Stir 30 秒冷却杯子,倒出化水
摇壶加入以下材料
45 ml 金酒
15 ml 糖浆
半个柠檬榨汁
摇壶加冰 Shake
倒入柯林杯
加苏打水补满
吧勺提拉
加入青柠片装饰
【新】拉莫斯金菲士(Ramos Gin Fizz)
杯子:柯林杯
原料:黄柠檬、青柠檬、金酒、奶油、鸡蛋、单糖浆
注意:柯林杯加满大块方冰 Stir 30 秒冷却杯子,倒出化水。加冰 Shake。杯子里最后没冰。
柯林杯加满大块方冰 Sti ...
二进制位操作
取一个 int 数的二进制表示的第 k 位:
12345int n = 42;int k = 2;// 将 n 右移 k 位,再与 1n >> k & 1;
把一个 int 数的二进制表示中最右边的一个 1 干掉:
12int n = 42; // 101010int m = n & (n - 1); // 101000
lowbit(x)lowbit(x)lowbit(x) 返回 x 的最后一位 1。
例如:12=(1100)212 = (1100)_212=(1100)2,lowbit(12)=(100)2=4lowbit(12) = (100)_2 = 4lowbit(12)=(100)2=4;14=(1110)214 = (1110)_214=(1110)2,lowbit(14)=(10)2=2lowbit(14) = (10)_2 = 2lowbit(14)=(10)2=2
x & (~x+1) <==> x & -x
123int lowbit(x) { return x & (-x) ...