注:子串sub-string(子数组 sub-array)是连续的,而子序列 subsequence 可以不连续。
数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。
题目分类 |
题目编号 |
数组的遍历 |
414, 485, 495, 628, 821 |
统计数组中的元素 |
41, 169, 274, 442, 448, 645, 697, 954, 2210 |
数组的改变, 移动 |
280, 283, 324, 453, 665, 760, 1243 |
数组的比较 |
1826, 2215 |
数组的旋转 |
189, 396 |
数组的翻转 |
969 |
特定顺序遍历二维数组 |
54, 59, 498 |
移除元素 |
26, 27, 283, 844, 977 |
二维数组变换 |
48, 73, 289, 566 |
二维数组及滚动数组 |
118, 119, 419, 598, 661 |
前缀和 preSum |
238, 303, 304, 643, 724, 1423, 2055 |
子数组 |
1708 |
差分数组 |
798, 1109, 2200 |
Top K 问题 |
215, 347, 378, 703, 剑指40 |
题目分类 |
题目编号 |
字符 |
520 |
回文串 |
125, 266 |
公共前缀 |
14, 720, 1455, 2185 |
单词 |
58, 434, 819 |
字符串旋转 & 平移 |
796, 1427 |
字符串反转 |
151, 246, 344, 541, 557, 917, 1056 |
字符的统计 |
49, 242, 383, 387, 389, 423, 451, 467, 535, 551, 657, 696 |
数字与字符串间转换 |
8, 12, 13, 38, 165, 273, 299, 412, 443, 481, 506, 537, 539, 553, 592, 640 |
子串 |
1180, 1933 |
子序列 |
392, 524, 521, 522 |
高精度运算 |
43, 66, 67, 306, 415 |
字符串变换 |
6, 68, 394, 408, 482 |
字符串匹配 |
28, 214, 459, 686 |
中心拓展法 |
5, 647 |
题目分类 |
题目编号 |
数字的位操作 (简单) |
9, 58, 168, 171, 190, 191, 231, 263, 326, 342, 405, 461, 476, 504, 693, 800, 1085 |
数字的位操作 (中等) |
7, 172, 233, 319, 357, 393, 400, 458, 477, 479, 564, 670, |
简单数学题 |
29, 492, 507 |
快速幂 |
50, 372 |
题目分类 |
题目编号 |
哈希表的查找, 插入及删除 |
128, 138, 166, 202, 205, 217, 290, 349, 466, 500, 532, 633 |
哈希表与索引 |
1, 167, 219, 220, 599 |
哈希表与统计 |
18, 350, 454, 554, 594, 609, 1086, 1133 |
哈希表与前缀和 |
523, 525, 560 |
题目分类 |
题目编号 |
用栈访问最后若干元素 |
71, 388, 682 |
栈与计算器 |
150, 224, 227 |
栈与括号匹配 |
20, 32, 591, 636 |
最大栈 |
716 |
题目分类 |
题目编号 |
链表的删除 |
19, 82, 83, 203, 237, 1474 |
链表的遍历 |
430, 876, 2181 |
链表的旋转与反转 |
24, 25, 61, 92, 143, 206 |
链表高精度加法 |
2, 445 |
链表的合并 |
21, 23 |
找节点问题 |
142, 160 |
链表的其他变化 |
328 |
题目分类 |
题目编号 |
树与递归 |
87, 100, 101, 222, 437, 508, 543, 563, 572, 617, 654, 687 |
树的层次/层序遍历 |
102, 103, 107, 112, 113, 116, 117, 129, 199, 257, 404, 429, 513, 515, 623, 637, 655, 662, 671, 690 |
树的前序遍历 |
144, 589 |
树的前序序列化 |
297, 331, 449, 606, 652 |
树的后序遍历 |
145, 590 |
树的中序遍历 & 二叉搜索树 |
94, 95, 98, 108, 109, 173, 230, 270, 450, 530, 538, 653, 669, 700, 1305, 剑指54 |
树的深度 |
104, 111, 559 |
平衡二叉树 |
110, 1382 |
重构二叉树 |
105, 106, 156, 226, 897 |
二叉树的展开 |
114 |
最近公共祖先 |
235, 236 |
Morris中序遍历 |
501, 99 |
四叉树 |
558, 427 |
题目分类 |
题目编号 |
头尾指针 |
11, 15, 16, 18, 42, 167, 345, 680, 1099 |
滑动窗口 (简单) |
485, 643, 674, 1176, 1984 |
滑动窗口 (中等) |
3, 159, 187, 209, 424, 438, 487, 567, 611, 1004, 1052, 1151, 1208, 1423, 1695, 2024 |
滑动窗口 (困难) |
30, 76, 239, 632, 727, |
分段双指针 |
86, 88, 160, 163, 328, 475 |
快慢指针 |
26, 27, 80, 141, 142, 143, 234, 287, 457, 2182, 剑指22 |
多指针 |
1213 |
题目分类 |
题目编号 |
数组中的动态规划 (简单) |
70, 338, 509, 746 |
数组中的动态规划 (中等) |
45, 55, 91, 198, 213, 264, 309, 313, 435, 487, 650, 714, 2100 |
数组中的动态规划 (困难) |
32, 123, 188, 403, 552, 639 |
子数组中的动态规划 |
53, 413, 689 |
子序列中的动态规划 |
300, 368, 446, 674, 727 |
背包问题: 0-1背包 |
416, 474, 494, 1049 |
背包问题: 完全背包 |
70, 279, 322, 377, 518 |
矩阵中的动态规划 |
62, 63, 64, 96, 120, 174, 221, 329, 576, 629, 688 |
动态规划与字符串匹配 |
10, 44, 72, 97, 115, 131, 132, 139, 140, 514, 516, 583 |
状态压缩动态规划 |
464, 473, 638, 691, 698, 1494 |
区间中的动态规划 |
312, 375, 486, 546, 664 |
树形dp |
124, 337 |
数位dp |
233, 357, 600 |
题目分类 |
题目编号 |
数组贪心算法 (简单) |
121, 228, 409, 455, 561, 575, 605, 860, 1005, 2016 |
数组贪心算法 (中等) |
45, 55, 56, 57, 75, 122, 134, 179, 406, 435, 452, 621, 646, 649, 678, 714, 1414, 2038 |
数组贪心算法 (困难) |
32, 135, 420, 517 |
子数组与贪心算法 |
53, 134, 152, 581 |
子序列与贪心算法 |
334, 376, 659, 674 |
数字与贪心 |
343 |
单调栈 + 贪心 |
84, 85, 316, 321, 402, 456, 496, 503, 1081 |
题目分类 |
题目编号 |
递归 |
341, 385, 394 |
记忆化递归 |
526, 576 |
题目分类 |
题目编号 |
分割 |
93, 131 |
子集 |
78, 90, 2044 |
排列 |
46, 47, 526 |
组合 |
17, 39, 40, 77, 139, 216 |
题目分类 |
题目编号 |
图的建立与应用 |
565 |
BFS 广度优先搜索 |
126, 127, 130, 133, 200, 310, 417, 433, 463, 529, 542, 675, 695, 2039 |
DFS 深度优先搜索 |
17, 365, 397, 399, 417, 2049 |
回溯法 |
31, 36, 37, 39, 40, 46, 47, 51, 52, 60, 77, 78, 79, 90, 93, 216, 332, 401, 491, 526, 556 |
回溯法与表达式 |
241, 282, 679 |
回溯法与括号 |
22, 301 |
回溯法与贪心 |
488 |
并查集 |
399, 547, 684, 685 |
拓扑排序 |
207, 210, 310, 1719 |
有限状态自动机 |
65, 468 |
Dijkstra算法 |
505, 743, 787, 1334, 1514, 1631 |
题目分类 |
题目编号 |
二分查找应用(简单) |
35, 69, 278, 367, 374, 441, 704, 744, 1064, 1150 |
二分查找应用(中等) |
4, 34, 162, 275, 287, 300, 354, 436, 540, 611, 658, 1237, 1300 |
二分查找与旋转数组 |
33, 81, 153, 154, 852, 1095 |
二分查找与矩阵 |
74, 240 |
二分答案法 |
378, 410, 483, 668, 875, 1011, 1283, 1292, 1482, 1552 |
题目分类 |
题目编号 |
(与 &) (或 |
) (非 ~) |
异或 ^ |
89, 136, 137, 260, 268, 2220, 剑指65 |
题目分类 |
题目编号 |
数据结构设计——栈与队列 |
155, 225, 232, 284, 622, 641, 933, 面试题03.06 |
数据结构设计——哈希表 |
355, 380, 381, 676 |
数据结构设计——哈希与双向链表 |
146, 432, 460 |
前缀树 / 字典树 / Trie树 |
208, 211, 212, 336, 386, 421, 440, 472, 648, 600, 677, 1065 |
堆 & 优先队列 |
23, 215, 253, 295, 347, 373, 378, 407, 480, 502, 630, 632, 692, 703 |
树状数组 |
307, 315, 327, 493, 673 |
线段树 |
699 |
平衡树(set/map) |
218, 352, 363 |
题目分类 |
题目编号 |
按权值采样 |
497, 528 |
水塘抽样 |
382, 398 |
拒绝采样 |
470, 478, 519 |
题目分类 |
题目编号 |
计算几何基础 |
149, 223, 447, 593 |
分类讨论法 |
335 |
凸包 |
587 (Jarvis 算法、Graham 算法、 Andrew 算法) |
覆盖问题 |
391 |
题目分类 |
题目编号 |
博弈论 |
292 |
分块 |
239, 164 |
倍增法 |
330 |
拓展欧几里得算法 |
365 |
洗牌算法 |
384 |
找规律 |
390, 672 |
分治法 |
395, 667 |
排序算法 |
147, 148, 1122 |
线性筛 |
204 |
摩尔投票法 |
169, 229 |