Skip to content

li-yazhou/algorithm-primer

Repository files navigation

algorithm-primer

algorithm primer - 算法基础、Leetcode编程、剑指offer

目录


Leetcode编程

Leetcode Category

栈与队列

No Problem Solution Difficulty Tag
20 有效的括号 Valid Parentheses Java Easy
94 二叉树的中序遍历 Binary Tree Inorder Java Medium
155 最小栈 Min Stack Java Easy
394 字符串编码 Decode String Java Medium

链表

No Problem Solution Difficulty Tag
2 两数相加 Add Two Numbers Java Medium
19 删除链表倒数第N个节点 Remove Nth Node From End of List Java Medium
21 合并两个有序链表 Merge Two Sorted Lists Java Easy
141 判断链表是是否存在环 Linked List Cycle Java Easy
142 环形链表II Linked List Cycle II Java Medium
148 排序链表 Sort List Java Medium
160 相交链表 Intersection of Two Linked Lists Java Easy
206 反转链表 Reverse Linked List Java Easy
234 回文链表 Palindrome Linked List Java Easy

数组与矩阵

No Problem Solution Difficulty Tag
105 Construct Binary Tree from Preorder and Inorder Traversal Java Medium
121 Best Time to Buy and Sell Stock Java Easy
152 Maximum Product Subarray Java Medium
169 Majority Element Java Easy
238 Product of Array Except Self Java Medium
283 Move Zeroes Java Easy
287 Find the Duplicate Number Java Medium
448 Find All Numbers Disappeared in an Array Java Easy
560 Subarray Sum Equals K Java Medium
581 Shortest Unsorted Continuous Subarray Java Easy

二叉树

No Problem Solution Difficulty Tag
94 二叉树的中序遍历 Binary Tree Inorder Java Medium
101 对称二叉树 Symmetric Tree Java Easy
102 二叉树的层次遍历 Binary Tree Level Order Traversal Java Medium
104 二叉树的最大深度 Maximum Depth of Binary Tree Java Easy
105 从前序与中序遍历序列构造二叉树 Construct Binary Tree from Preorder and Inorder Traversal Java Medium
114 二叉树展开为链表 Flatten Binary Tree to Linked List Java Medium
124 二叉树中的最大路径和 Binary Tree Maximum Path Sum Java Hard
226 翻转二叉树 Invert Binary Tree Java Easy
236 二叉树的最近公共祖先 Lowest Common Ancestor of a Binary Tree Java Medium
257 二叉树路径 Binary Tree Paths Java Easy
337 打家劫舍 III House Robber III Java Medium
437 路径总和 III Path Sum III Java Easy
543 二叉树的直径 Diameter of Binary Tree Java Easy
617 合并二叉树 Merge Two Binary Trees Java Easy

二叉搜索树

No Problem Solution Difficulty Tag
96 不同的二叉搜索树 Unique Binary Search Trees Java Medium
98 验证二叉搜索树 Validate Binary Search Tree Java Medium
538 把二叉搜索树转换为累加树 Convert BST to Greater Tree Java Easy

字典树

No Problem Solution Difficulty Tag
208 实现 Trie (前缀树) Implement Trie (Prefix Tree) Java Medium

哈希表

No Problem Solution Difficulty Tag
1 两数之和 Two Sum Java Easy
3 无重复字符的最长子串 Longest Substring Without Repeating Characters Java Medium
49 字母异位词分组 Group Anagrams Java Medium
94 二叉树的中序遍历 Binary Tree Inorder Java Medium
136 只出现一次的数字 Single Number Java Easy
347 前 K 个高频元素 Top K Frequent Elements Java Medium
438 找到字符串中所有字母异位词 Find All Anagrams in a String Java Medium
560 和为K的子数组 Subarray Sum Equals K Java Medium

字符串

No Problem Solution Difficulty Tag
3 无重复字符的最长子串 Longest Substring Without Repeating Characters Java Medium
5 最长回文子串 Longest Palindromic Substring Java Medium
17 电话号码的字母组合 Letter Combinations of a Phone Number Java Medium
20 有效的括号 Valid Parentheses Java Easy
22 括号生成 Generate Parentheses Java Medium
49 字母异位词分组 Group Anagrams Java Medium
647 回文子串 Palindromic Substrings Java Medium

No Problem Solution Difficulty Tag
215 数组中的第K个最大元素 Kth Largest Element in an Array Java Medium
347 前 K 个高频元素 Top K Frequent Elements Java Medium

排序

排序应用

No Problem Solution Difficulty Tag
56 合并区间 Merge Intervals Java Medium
75 颜色分类 Sort Colors Java Medium
148 排序链表 Sort List Java Medium

拓扑排序

No Problem Solution Difficulty Tag
207 课程表 Course Schedule Java Medium

二分查找

No Problem Solution Difficulty Tag
34 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array Java Medium
240 搜索二维矩阵 II Search a 2D Matrix II Java Medium
287 寻找重复数 Find the Duplicate Number Java Medium
300 最长上升子序列 Longest Increasing Subsequence Java Medium

双指针

No Problem Solution Difficulty Tag
3 无重复字符的最长子串 Longest Substring Without Repeating Characters Java Medium
11 盛最多水的容器 Container With Most Water Java Medium
15 三数之和 3Sum Java Medium
16 最接近的三数之和 3Sum Closest Java Medium
19 删除链表的倒数第N个节点 Remove Nth Node From End of List Java Medium
75 颜色分类 Sort Colors Java Medium
141 环形链表 Linked List Cycle Java Easy
142 环形链表 II Linked List Cycle II Java Medium
167 两数之和 II - 输入有序数组 Two Sum II - Input array is sorted Java Easy
234 回文链表 Palindrome Linked List Java Easy
283 移动零 Move Zeroes Java Easy
287 寻找重复数 Find the Duplicate Number Java Medium

递归与动态规划

No Problem Solution Difficulty Tag
338 比特位计数 Counting Bits Java Medium
416 分割等和子集 Partition Equal Subset Sum Java Medium
494 目标和 Target Sum Java Medium
647 回文子串 Palindromic Substrings Java Medium

贪心

No Problem Solution Difficulty Tag
55 跳跃游戏 Jump Game Java Medium
406 根据身高重建队列 Queue Reconstruction by Height Java Medium

分治

No Problem Solution Difficulty Tag
53 最大子序和 Maximum Subarray Java Easy
169 多数元素 Majority Element Java Easy
215 数组中的第K个最大元素 Kth Largest Element in an Array Java Medium
240 Search a 2D Matrix II Java Medium

搜索

回溯

No Problem Solution Difficulty Tag
17 电话号码的字母组合 Letter Combinations of a Phone Number Java Medium
22 括号生成 Generate Parentheses Java Medium
39 组合总和 Combination Sum Java Medium
46 全排列 Permutations Java Medium
78 子集 Subsets Java Medium
79 单词搜索 Word Search Java Medium

位运算

No Problem Solution Difficulty Tag
78 子集 Subsets Java Medium
136 只出现一次的数字 Single Number Java Easy
169 多数元素 Majority Element Java Easy
338 比特位计数 Counting Bits Java Medium
461 汉明距离 Hamming Distance Java Easy

滑动窗口

No Problem Solution Difficulty Tag
3 无重复字符的最长子串 Longest Substring Without Repeating Characters Java Medium

Top 100 Liked Questions

No Problem Solution Difficulty Tag
1 两数之和 Two Sum Java Easy
2 Add Two Numbers Java Medium
3 无重复字符的最长子串 Longest Substring Without Repeating Characters Java Medium
5 最长回文子串 Longest Palindromic Substring Java Medium
11 盛最多水的容器 Container With Most Water Java Medium
15 三数之和 3Sum Java Medium
16 最接近的三数之和 3Sum Closest Java Medium
17 电话号码的字母组合 Letter Combinations of a Phone Number Java Medium
19 删除链表的倒数第N个节点 Remove Nth Node From End of List Java Medium
20 有效的括号 Valid Parentheses Java Easy
21 Merge Two Sorted Lists Java Easy
22 括号生成 Generate Parentheses Java Medium
31 Next Permutation Java Medium
34 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array Java Medium
39 组合总和 Combination Sum Java Medium
46 全排列 Permutations Java Medium
48 Rotate Image Java Medium
49 字母异位词分组 Group Anagrams Java Medium
53 最大子序和 Maximum Subarray Java Easy
55 跳跃游戏 Jump Game Java Medium
56 合并区间 Merge Intervals Java Medium
62 Unique Paths Java Medium
62 Minimum Path Sum Java Medium
70 Climbing Stairs Java Easy
75 颜色分类 Sort Colors Java Medium
78 子集 Subsets Java Medium
79 单词搜索 Word Search Java Medium
94 二叉树的中序遍历 Binary Tree Inorder Java Medium
96 不同的二叉搜索树 Unique Binary Search Trees Java Medium
98 验证二叉搜索树 Validate Binary Search Tree Java Medium
101 对称二叉树 Symmetric Tree Java Easy
102 二叉树的层次遍历 Binary Tree Level Order Traversal Java Medium
104 二叉树的最大深度 Maximum Depth of Binary Tree Java Easy
105 从前序与中序遍历序列构造二叉树 Construct Binary Tree from Preorder and Inorder Traversal Java Medium
114 二叉树展开为链表 Flatten Binary Tree to Linked List Java Medium
121 Best Time to Buy and Sell Stock Java Easy
124 二叉树中的最大路径和 Binary Tree Maximum Path Sum Java Hard
136 只出现一次的数字 Single Number Java Easy
139 Word Break Java Medium
141 环形链表 Linked List Cycle Java Easy
142 环形链表 II Linked List Cycle II Java Medium
146 LRU Cache Java Medium
148 排序链表 Sort List Java Medium
152 Maximum Product Subarray Java Medium
155 Min Stack Java Easy
160 Intersection of Two Linked Lists Java Easy
169 多数元素 Majority Element Java Easy
198 House Robber Java Easy
200 Number of Islands Java Medium
206 Reverse Linked List Java Easy
207 课程表 Course Schedule Java Medium
208 实现 Trie (前缀树) Implement Trie (Prefix Tree) Java Medium
215 数组中的第K个最大元素 Kth Largest Element in an Array Java Medium
221 Maximal Square Java Medium
226 翻转二叉树 Invert Binary Tree Java Easy
234 回文链表 Palindrome Linked List Java Easy
236 二叉树的最近公共祖先 Lowest Common Ancestor of a Binary Tree Java Medium
238 Product of Array Except Self Java Medium
240 搜索二维矩阵 II Search a 2D Matrix II Java Medium
253 Meeting Rooms II Java Medium
279 Perfect Squares Java Medium
283 移动零 Move Zeroes Java Easy
287 寻找重复数 Find the Duplicate Number Java Medium
300 最长上升子序列 Longest Increasing Subsequence Java Medium
309 Best Time to Buy and Sell Stock with Cooldown Java Medium
322 Coin Change Java Medium
337 打家劫舍 III House Robber III Java Medium
338 比特位计数 Counting Bits Java Medium
347 前 K 个高频元素 Top K Frequent Elements Java Medium
394 Decode String Java Medium
399 Evaluate Division Java Medium
406 根据身高重建队列 Queue Reconstruction by Height Java Medium
416 分割等和子集 Partition Equal Subset Sum Java Medium
437 路径总和 III Path Sum III Java Easy
438 找到字符串中所有字母异位词 Find All Anagrams in a String Java Medium
448 Find All Numbers Disappeared in an Array Java Easy
461 汉明距离 Hamming Distance Java Easy
494 目标和 Target Sum Java Medium
538 把二叉搜索树转换为累加树 Convert BST to Greater Tree Java Easy
543 二叉树的直径 Diameter of Binary Tree Java Easy
560 和为K的子数组 Subarray Sum Equals K Java Medium
581 Shortest Unsorted Continuous Subarray Java Easy
617 合并二叉树 Merge Two Binary Trees Java Easy
647 回文子串 Palindromic Substrings Java Medium

Note:

着重体的问题表示未开放。

All Questions

No Problem Solution Difficulty Tag
167 两数之和 II - 输入有序数组 Two Sum II - Input array is sorted Java Easy
257 二叉树路径 Binary Tree Paths Java Easy

剑指offer

剑指offerV2源码

剑指offer V1编程题目录

《剑指offer V1》编程题源码

《剑指offer V1》编程题Markdown

剑指offer V1 编程题汇总

剑指offer V2分类

剑指offer 数组与哈希表

No Leetcode Problem & Solution Tag
003 数组中重复的数字 数组
004 二维数组中的查找 数组
011 旋转数组中的最小数字 数组与二分查找
017 打印从 1 到最大的 n 位数 数组、大整数
021 调整数组顺序使奇数位于偶数前面 数组、快排
039 数组中出现次数超过一半的数字 数组、多数投票问题
040 最小的 k 个数 数组、topK、大根堆
041 数据流中的中位数 数组、大根堆、小根堆
041-2 字符流中第一个不重复的字符 字符的数组索引、队列
050 第一个只出现一次的字符 数组、数组索引、哈希表、比特位集
053 数字在排序数组中出现的次数 数组、折半查找
056 数组中只出现一次的数字 位运算、数组
057 有序数组中查找和为s的两个数 数组、双指针
058 翻转单词顺序 数组、字符串
058-2 左旋转字符串 数组、字符串
061 扑克牌的顺子 数组
065 构建乘积数组 数组

剑指offer 链表

No Problem & Solution Tag
006 从尾到头打印链表 链表
018-1 在 O(1) 时间删除链表结点 链表
018-2 删除链表中重复的结点 链表
022 链表中倒数第 k 个节点 链表、双指针
023 链表中环的入口结点 链表、双指针
024 反转链表 链表、递归
035 复杂链表的复制 链表

剑指offer 二叉树

No Leetcode Problem & Solution Tag
007 根据前序和中序遍历结果重建二叉树 二叉树
008 查找二叉树指定节点的中序遍历的下一个节点 二叉树
026 树的子结构 二叉树、递归
027 二叉树的镜像 二叉树、递归
028 对称的二叉树 二叉树、递归
032 从上到下打印二叉树 二叉树、层次遍历、队列
032-2 把二叉树打印成多行 二叉树、层次遍历、队列
032-3 按之字形顺序打印二叉树 二叉树、层次遍历、队列、栈
033 二叉搜索树的后序遍历序列 二叉搜索树、后序遍历
034 二叉树中和为某一值的路径 二叉树路径、递归
036 二叉搜索树与双向链表 二叉搜索树、双向链表
037 序列化二叉树 二叉树、递归
054 二叉搜索树的第k个结点 二叉搜索树、中序遍历
055 二叉树的深度 二叉树、二叉树的遍历
055-2 平衡二叉树 二叉树、二叉树的遍历
068 树中两个节点的最低公共祖先节点 二叉树、递归、树的路径

剑指offer 栈与队列

No Leetcode Problem & Solution Tag
009 用两个栈实现队列 栈与队列
059 滑动窗口的最大值 双端队列、大根堆

剑指offer 字符串

No Problem & Solution Tag
005 替换字符串中的空格 字符串
038 字符串的排列 字符串、递归、回溯
044 数字序列中的某一位数字 字符串
045 把数组排成最小的数 字符串、数组

剑指offer 位运算

No Leetcode Problem & Solution Tag
015 二进制中1的个数 位运算
056 数组中只出现一次的数字 位运算、数组

剑指offer 递归与动态规划

No Leetcode Problem & Solution Tag
010-1 斐波那契数列 递归与动态规划
010-2 矩形覆盖 递归与动态规划
010-3 跳台阶 递归与动态规划
010-4 变态跳台阶 递归与动态规划
012 矩阵中的路径 递归、回溯、DFS
013 机器人的运动范围 递归、回溯、DFS
016 数值的整数次方 递归
049 第 N 个丑数 动态规划
062 圆圈中最后剩下的数字 递归
063 股票的最大利润 动态规划、贪心
064 求前N个正整数之和 递归

剑指offer V2

No Leetcode Problem & Solution Tag
003 数组中重复的数字 数组
004 二维数组中的查找 数组
005 替换字符串中的空格 字符串
006 从尾到头打印链表 链表
007 根据前序和中序遍历结果重建二叉树 二叉树
008 查找二叉树指定节点的中序遍历的下一个节点 二叉树
009 用两个栈实现队列 栈与队列
010-1 斐波那契数列 递归与动态规划
010-2 矩形覆盖 递归与动态规划
010-3 跳台阶 递归与动态规划
010-4 变态跳台阶 递归与动态规划
011 旋转数组中的最小数字 数组与二分查找
012 矩阵中的路径 递归、回溯、DFS
013 机器人的运动范围 递归、回溯、DFS
014 剪绳子使各段长度的乘积最大 贪心、动态规划
015 二进制中1的个数 位运算
016 数值的整数次方 递归、折半
017 打印从 1 到最大的 n 位数 数组、大整数
018-1 在 O(1) 时间删除链表结点 链表
018-2 删除链表中重复的结点 链表
019 正则表达式 动态规划
020 表示数值的字符串 字符串、正则表达式
021 调整数组顺序使奇数位于偶数前面 数组、快排
022 链表中倒数第 k 个节点 链表、双指针
023 链表中环的入口结点 链表、双指针
024 反转链表 链表、递归
026 树的子结构 二叉树、递归
027 二叉树的镜像 二叉树、递归
028 对称的二叉树 二叉树、递归
029 顺时针打印矩阵 数组
030 包含 min 函数的栈
031 栈的压入、弹出序列
032 从上到下打印二叉树 二叉树、层次遍历、队列
032-2 把二叉树打印成多行 二叉树、层次遍历、队列
032-3 按之字形顺序打印二叉树 二叉树、层次遍历、队列、栈
033 二叉搜索树的后序遍历序列 二叉搜索树、后序遍历
034 二叉树中和为某一值的路径 二叉树路径、递归
035 复杂链表的复制 链表
036 二叉搜索树与双向链表 二叉搜索树、双向链表
037 序列化二叉树 二叉树、递归
038 字符串的排列 字符串、递归、回溯
039 数组中出现次数超过一半的数字 数组、多数投票问题
040 最小的 k 个数 数组、topK、大根堆
041 数据流中的中位数 数组、大根堆、小根堆
041-2 字符流中第一个不重复的字符 字符的数组索引、队列
042 连续子数组的最大和 数组、动态规划
043 从 1 到 n 整数中 1 出现的次数
044 数字序列中的某一位数字 字符串
045 把数组排成最小的数 字符串、数组
046 把数字翻译成字符串 动态规划
047 礼物的最大价值 动态规划
048 最长不含重复字符的子字符串
049 第 N 个丑数 动态规划
050 第一个只出现一次的字符 数组、数组索引、哈希表、比特位集
051 数组中的逆序对 数组、排序
052 两个链表的第一个公共结点 链表、双指针
053 数字在排序数组中出现的次数 数组、折半查找
054 二叉搜索树的第k个结点 二叉搜索树、中序遍历
055 二叉树的深度 二叉树、二叉树的遍历
055-2 平衡二叉树 二叉树、二叉树的遍历
056 数组中只出现一次的数字 位运算、数组
057 有序数组中查找和为s的两个数 数组、双指针
057-2 为 s 的连续正数序列 数组、双指针
058 翻转单词顺序 数组、字符串
058-2 左旋转字符串 数组、字符串
059 滑动窗口的最大值 双端队列、大根堆
060 n 个骰子的点数
061 扑克牌的顺子 数组
062 圆圈中最后剩下的数字 递归
063 股票的最大利润 动态规划、贪心
064 求前N个正整数之和 递归
065 不用加减乘除做加法 位运算、递归
066 构建乘积数组 数组
067 把字符串转换成整数 字符串
068 树中两个节点的最低公共祖先节点 二叉树、递归、树的路径

剑指offer V1

No Problem & Solution
2 实现单例模式
3 二维数组中的查找
4 替换空格
5 从尾到头打印链表
6 重建二叉树2
7 用两个栈实现队列
8 旋转数组的最小数字
9 斐波那契数列/青蛙跳台阶/矩形覆盖/变态跳台阶
10 二进制中 1 的个数
11 数值的整数次方
12 打印 1 到最大的 n 位整数
13 在 o(1) 时间删除链表结点
14 调整数组顺序使奇数位于偶数前面
15 链表中倒数第 k 个节点
16 反转链表
17 合并两个排序的链表
18 树的子结构
19 二叉树的镜像
20 顺时针打印矩阵
21 包含 min 函数的栈
22 栈的压入、弹出序列
23 从上到下打印二叉树
24 二叉搜索树的后序遍历序列
25 二叉树中和为某一值的路径
26 复杂链表的复制
27 二叉搜索树与双向链表
28 字符串的排列
29 数组中出现次数超过一半的数字
30 最小的 k 个数
31 连续子数组的最大和
32 从 1 到 n 整数中 1 出现的次数
33 把数组排成最小的数
34 丑数
35 第一个只出现一次的字符
36 数组中的逆数对
37 两个链表的第一个公共结点
38 数字在排序数组中出现的次数
39 二叉树的深度
40 数组中只出现一次的数字
41 和为 s 的两个数字 VS 和为 s 的连续正数序列
42 翻转单词顺序 VS 左旋转字符串
43 n 个骰子的点数
44 扑克牌的顺子
45 圆圈中最后剩下的数字
46 求前 n 项正整数的和(不能使用乘除法以及for、while、if 等关键字)
47 不用加减乘除做加法
48 不能被继承的类
49 把字符串转换成整数
50 树中两个结点的最低公共祖先结点
51 数组中重复的数字
52 构建乘积数组
55 字符流中第一个不重复的字符
56 链表中环的入口结点
57 删除链表中重复的结点
58 二叉树的下一个结点
59 对称的二叉树
60 把二叉树打印成多行
61 按之字形顺序打印二叉树
62 序列化二叉树
63 二叉搜索树的第k个结点
64 数据流中的中位数
65 滑动窗口的最大值

参考

  • leetcode overview
  • 《程序员代码面试指南 第2版》
  • 《剑指offer 第2版》
  • 《编程之美》
  • 《编程珠玑》
  • 《算法 第4版》
  • 《算法导论 第3版》

About

算法基础、《剑指Offer》、leetcode,Java实现

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages