/LeetCodeAndSwordToOffer

:writing_hand: LeetCode、SwordToOffer and other algorithms in Java.

Primary LanguageJava

目录

基础算法

返回目录

# English Title Chinese Title Solution
1 InB_ArrayAndNotInA_Array 找出在数组 B 中而不在数组 A 中的数 Java
2 BubbleSort 冒泡排序 Java
3 SelectionSort 选择排序 Java
4 InsertionSort 插入排序 Java
5 Recursive 递归 Java
6 MergeSort 归并排序 Java
7 SmallSum 小和问题 Java
8 ArrayDivision 数组划分问题 Java
9 NetherlandsFlag 荷兰国旗问题 Java
10 QuickSort 快速排序 Java
11 HeapSort 堆排序 Java
12 BucketSort 桶排序 Java
13 ArrayStack 用数组实现固定的栈 Java
14 ArrayQueue 用数组实现固定的队列 Java
16 StackAndQueueConvert 栈与队列相互实现 Java
17 PrintMatrixSpiralOrder 顺时针打印矩阵 Java
18 RotateMatrix 将正方形顺时针旋转 90° Java
19 ReverseList 反转单向链表和双向链表 Java
20 ZigZagPrintMatrix 之字形打印矩阵 Java
21 FindNumInSortedMatrix 在排好序的矩阵中找到指定的数 Java
22 IsPalindromeList 判断一个链表是否是回文结构 Java
23 SmallerEqualBiggerInList 根据给定的值划分单向链表 Java
25 FindFirstIntersectNode 两个单链表相交的一系列问题 Java
26 PreInPosTraversal 二叉树的先序、中序、后序、层次遍历(递归与非递归) Java
27 IsBinarySearchTree 判断一棵树是否是二叉搜索树 Java
28 IsCompleteBinaryTree 判断一棵树是否是完全二叉树 Java
29 CompleteBinaryTreeNodeNumber 求完全二叉树节点的个数 Java
30 HashMap 哈希表的基本使用 Java
31 RandomPool 实现 RandomPool Java
32 UnionFind 并查集的查找与合并操作 Java
33 Islands 岛问题 Java
34 TrieTree 前缀树 Java
35 LowestLexicography 字典序最小的字符串 Java
36 LessMoney 分割金条的最小代价 Java
37 MaximizedCapital 项目的最大钱数 Java
38 BestArrange 最多的宣讲场次 Java
39 Factorial 求 n 的阶乘 Java
40 TowerOfHanoi 汉诺塔问题 Java
41 PrintAllSubsquences 打印一个字符串的全部子序列 Java
42 CowNumber 母牛生崽问题 Java
43 MinPathInMatrix 矩阵中的最小路径和 Java
44 IsAimValueInArray 数组中的数累加起来等于目标值 Java

进阶算法

返回目录

# English Title Chinese Title Solution
1 KMP 字符串匹配算法 Java
2 ShortestContainTwiceOriginalString 包含两次原始字符串的最短字符串 Java
3 T1SubtreeEqualsT2 树中是否有一棵子树与给定的树对应 Java
4 Manacher 字符串的最长回文子串 Java
5 ShortestEnd 在字符串后添加字符变成回文串 Java
6 BFPRT 找到前 K 小的数或前 K 大的数 Java
7 MaxWindow 生成窗口最大值数组 Java
8 AllLessNumSubArray 最大值减去最小值小于等于 num 的子数组数量 Java
9 GetMaxTree 得到满足条件的最大二叉树 Java
10 MaxRecSize 求最大子矩阵的大小 Java
11 MountainsAndFalme 可见的山峰对的数量 Java
12 MorrisTraversal Morris 前中后遍历 Java
13 BuildingOutline 天际线问题 Java
14_01 LongestSumSubArrayLength 累加和等于 k 的最长子数组的长度(正数、负数、零) Java
14_02 LongestSumSubArrayLength 累加和等于 k 的最长子数组的长度(全是正数) Java
14_03 LongestSumSubArrayLength 累加和小于等于 k 的最长子数组的长度(正数、负数、零) Java
15 MostEOR 数组中的异或和为 0 的最多划分 Java
16 BiggestSubBSFInTree 构建最大搜索二叉子树 Java
17 MaxDistanceInTree 二叉树上的最远距离 Java
18 MaxHappy 最大的活跃值 Java
19 LRU 最近最少使用 Java
20 MaxEOR 子数组的最大异或和 Java
21 MaxCoinsWayAmount 最多的换钱方法 Java
22 RegularExpressionMatch 正则匹配问题 Java
23 RotateString 旋转字符串 Java

剑指Offer

返回目录

# English Title Chinese Title Solution
3 FindDuplicationInArray 数组中重复的数字 Java
4 FindInPartiallySortedMatrix 二维数组中的查找 Java
5 ReplaceSpaces 替换空格 Java
6 PrintListInReversedOrder 从尾到头打印链表 Java
7 ConstructBinaryTree 重建二叉树 Java
8 NextNodeInBinaryTrees 二叉树的下一个结点 Java
9 QueueWithTwoStacks 用两个栈实现队列 Java
10_01 Fibonacci 斐波那契数列 Java
10_02 Climbing Stairs 爬楼梯 Java
10_03 Climbing StairsⅡ 爬楼梯Ⅱ Java
11_01 MinNumberInRotatedArray 旋转数组的最小数字 Java
11_02 MinNumberInRotatedArray Ⅱ 旋转数组的最小数字 Ⅱ Java
12 StringPathInMatrix 矩阵中的路径 Java
13 RobotMove 机器人的运动范围 Java
14_01 CuttingRope 剪绳子 Java
14_02 CuttingRope Ⅱ 剪绳子Ⅱ Java
15 NumberOf1InBinary 二进制中 1 的个数 Java
16 Power 数值的整数次方 Java
17 Print1ToMaxOfNDigits 打印从 1 到最大的 n 位数 Java
18_01 DeleteNodeInList 在 O(1) 时间内删除链表节点 Java
18_02 DeleteDuplicatedNode 删除链表中重复的结点 Java
18_03 DeleteDuplicatedNodeⅡ 删除链表中重复的结点Ⅱ Java
19 RegularExpressionsMatching 正则表达式匹配 Java
20 NumericStrings 表示数值的字符串 Java
21 ReorderArray 调整数组顺序使奇数位于偶数前面 Java
22 KthNodeFromEnd 链表中倒数第 K 个结点 Java
23 EntryNodeInListLoop 链表中环的入口结点 Java
24 ReverseList 反转链表 Java
25 MergeSortedLists 合并两个排序的链表 Java
26 SubstructureInTree 树的子结构 Java
27 MirrorOfBinaryTree 二叉树的镜像 Java
28 SymmetricalBinaryTree 对称的二叉树 Java
29 PrintMatrix 顺时针打印矩阵 Java
30 MinInStack 包含 min 函数的栈 Java
31 StackPushPopOrder 栈的压入、弹出序列 Java
32_01 PrintTreeFromTopToBottom 不分行从上往下打印二叉树 Java
32_02 PrintTreesInLines 分行从上往下打印二叉树 Java
32_03 PrintTreesInZigzag 之字形打印二叉树 Java
33 VerifySquenceOfBST 二叉搜索树的后序遍历序列 Java
34 PathInTree 二叉树中和为某一值的路径 Java
35 CopyComplexList 复杂链表的复制 Java
36 ConvertBinarySearchTree 二叉搜索树与双向链表 Java
37 SerializeBinaryTrees 序列化二叉树 Java
38 StringPermutation 字符串的排列 Java
39 MoreThanHalfNumber 数组中出现次数超过一半的数字 Java
40 KLeastNumbers 最小的 K 个数 Java
41_01 StreamMedian 数据流中的中位数 Java
41_02 FirstAppearingOnce 字符流中第一个不重复的字符 Java
42 GreatestSumOfSubarrays 连续子数组的最大和 Java
43 NumberOf1Between1AndN 从 1 到 n 整数中 1 出现的次数 Java
44 DigitsInSequence 数字序列中某一位的数字 Java
45 SortArrayForMinNumber 把数组排成最小的数 Java
46 TranslateNumbersToStrings 把数字翻译成字符串 Java
47 MaxValueOfGifts 礼物的最大价值 Java
48 LongestSubstringWithoutDup 最长不含重复字符的子字符串 Java
49 UglyNumber 丑数 Java
50 FirstNotRepeatingChar 第一个只出现一次的字符位置 Java
51 InversePairs 数组中的逆序对 Java
52 FirstCommonNodesInLists 两个链表的第一个公共结点 Java
53_01 NumberOfK 数字在排序数组中出现的次数 Java
53_02 MissingNumber 0~n-1 中缺失的数字 Java
53_03 IntegerIdenticalToIndex 数组中数值和下标相等的元素 Java
54 KthNodeInBST 二叉搜索树的第 K 大结点 Java
55_01 TreeDepth 二叉树的深度 Java
55_02 BalancedBinaryTree 平衡二叉树 Java
56_01 NumbersAppearOnce 数组中只出现一次的两个数字 Java
56_02 NumberAppearingOnce 数组中唯一只出现一次的数字 Java
57_01 TwoNumbersWithSum 和为 S 的两个数字 Java
57_02 ContinuousSquenceWithSum 和为 S 的连续正数序列 Java
58_01 ReverseWordsInSentence 翻转单词顺序列 Java
58_02 LeftRotateString 左旋转字符串 Java
59_01 MaxInSlidingWindow 滑动窗口的最大值 Java
59_02 MaxInQueue 队列的最大值 Java
60 DicesProbability n 个骰子的点数 Java
61 ContinousCards 扑克牌中的顺子 Java
62 LastNumberInCircle 圆圈中最后剩下的数字 Java
63 MaximalProfit 股票的最大利润 Java
64 Accumulate 求 1+2+3+...+n Java
65 AddTwoNumbers 不用加减乘除做加法 Java
66 ConstuctArray 构建乘积数组 Java
67 StringToInt 把字符串转换成整数 Java
68_01 LowestCommonAncestorInBST 二叉搜索树的最近公共祖先 Java
68_02 LowestCommonAncestor 二叉树的最近公共祖先 Java

LeetCode

返回目录

按照不同的类别进行分类,参考自 CyC2018/CS-Notes

算法**相关

01.双指针

# English Title Chinese Title Solution Difficulty
3 Longest Substring Without Repeating Characters 无重复字符的最长子串 Java Medium
11 Container With Most Water 盛最多水的容器 Java Medium
15 3Sum 三数之和 Java Medium
42 Trapping Rain Water 接雨水 Java Hard
76 Minimum Window Substring 最小覆盖子串 Java Hard
88 Merge Sorted Array 合并两个有序数组 Java Easy
141 Linked List Cycle 环形链表 Java Easy
167 Two Sum Ⅱ 两数之和 Ⅱ - 输入有序数组 Java Easy
345 Reverse Vowels of a String 反转字符串中的元音字母 Java Easy
415 Add Strings 字符串相加 Java Easy
524 Longest Word in Dictionary through Deleting 通过删除字母匹配到字典里最长单词 Java Medium
633 Sum of Square Numbers 平方数之和 Java Easy
680 Valid Palindrome Ⅱ 验证回文字符串 Ⅱ Java Easy

02.动态规划

# English Title Chinese Title Solution Difficulty
53 Maximum Subarray 最大子序和 Java Easy
62 UniquePaths 不同路径 Java Medium
64 Minimum Path Sum 最小路径和 Java Medium
70 Climbing Stairs 爬楼梯 Java Easy
72 Edit Distance 编辑距离 Java Hard
91 Decode Ways 解码方法 Java Medium
121 Best Time to Buy and Sell Stock 买卖股票的最佳时机 Java Easy
122 Best Time to Buy and Sell Stock Ⅱ 买卖股票的最佳时机 Ⅱ Java Easy
123 Best Time to Buy and Sell Stock Ⅲ 买卖股票的最佳时机 Ⅲ Java Hard
188 Best Time to Buy and Sell Stock Ⅳ 买卖股票的最佳时机 Ⅳ Java Hard
198 House Robber 打家劫舍 Java Easy
152 Maximum Product Subarray 乘积最大子数组 Java Medium
213 House Robber Ⅱ 打家劫舍 Ⅱ Java Medium
300 Longest Increasing Subsequence 最长上升子序列 Java Medium
303 Range Sum Query - Immutable 区域和检索 - 数组不可变 Java Easy
343 Integer Break 整数拆分 Java Medium
354 Russian Doll Envelopes 俄罗斯套娃信封问题 Java Hard
376 Wiggle Subsequence 摆动序列 Java Medium
377 Combination Sum Ⅳ 组合总和 Ⅳ Java Medium
413 Arithmetic Slices 等差数列划分 Java Medium
509 Fibonacci Number 斐波那契数 Java Easy
646 Maximum Length of Pair Chain 最长数对链 Java Medium
1143 Longest Common Subsequence 最长公共子序列 Java Medium

03.贪心

# English Title Chinese Title Solution Difficulty
45 Jump GameⅡ 跳跃游戏Ⅱ Java Hard
53 Maximum Subarray 最大子数组和 Java Easy
55 Jump Game 跳跃游戏 Java Medium
121 Best Time to Buy and Sell Stock 买卖股票的最佳时机 Java Easy
122 Best Time to Buy and Sell Stock Ⅱ 买卖股票的最佳时机 Ⅱ Java Easy
392 Is Subsequence 判断是否是子序列 Java Medium
406 Queue Reconstruction by Height 根据身高重建队列 Java Medium
435 Non-overlapping Intervals 无重叠区间 Java Medium
452 Minimum Number of Arrows to Burst Balloons 用最少数量的箭引爆气球 Java Medium
455 Assign Cookies 分配饼干 Java Medium
605 Can Place Flowers 种花问题 Java Easy
665 Non-decreasing Array 非递减数列 Java Easy
763 Partition Labels 划分字母区间 Java Medium

04.二分查找

# English Title Chinese Title Solution Difficulty
33 Search in Rotated Sorted Array 搜索旋转排序数组 Java Medium
34 Find First and Last Position of Element in Sorted Array 在排序数组中查找元素的第一个和最后一个位置 Java Medium
69 Sqrt(x) x 的平方根 Java Easy
153 Find Minimum in Rotated Sorted Array 旋转数组的最小数字 Java Medium
278 First Bad Version 第一个错误的版本 Java Easy
287 Find the Duplicate Number 寻找重复数 Java Medium
540 Single Element in a Sorted Array 有序数组中的单一元素 Java Medium
744 Find Smallest Letter Greater Than Target 寻找比目标字母大的最小字母 Java Easy
1095 Find in Mountain Array 山脉数组中查找目标值 Java Hard

05.分治

# English Title Chinese Title Solution Difficulty
95 Unique Binary Search Trees Ⅱ 不同的二叉搜索树 Ⅱ Java Medium
241 Different Ways to Add Parentheses 为运算表达式设计优先级 Java Medium

06.搜索

# English Title Chinese Title Solution Difficulty
17 Letter Combinations of a Phone Number 电话号码的字母组合 Java Medium
22 Generate Parentheses 生成括号 Java Medium
39 Combination Sum 组合总和 Java Medium
40 Combination Sum Ⅱ 组合总和 Ⅱ Java Medium
46 Permutations 全排列 Java Medium
47 Permutations Ⅱ 全排列 Ⅱ Java Medium
77 Combinations 组合 Java Medium
78 Subsets 子集 Java Medium
90 Subsets Ⅱ 子集 Ⅱ Java Medium
93 Word Search 单词搜索 Java Medium
112 Path Sum 路径总和 Java Easy
113 Path Sum Ⅱ 路径总和 Ⅱ Java Medium
126 Word Ladder Ⅱ 单词接龙 Ⅱ Java Hard
127 Word Ladder 单词接龙 Java Medium
130 Surrounded Regions 被围绕的区域 Java Medium
131 Palindrome Partitioning 分割回文串 Java Medium
200 Number of Islands 岛屿数量 Java Medium
216 Combination Sum Ⅲ 组合总和 Ⅲ Java Medium
257 Binary Tree Paths 二叉树的所有路径 Java Easy
279 Perfect Squares 完全平方数 Java Medium
417 Pacific Atlantic Water Flow 太平洋大西洋水流问题 Java Medium
437 Path Sum Ⅲ 路径总和 Ⅲ Java Easy
542 0/1 Matrix 0/1 矩阵 Java Medium
547 Friend Circles 朋友圈 Java Medium
695 Max Area of Island 岛屿的最大面积 Java Medium
1091 Shortest Path in Binary Matrix 二进制矩阵中的最短路径 Java Medium

07.排序

# English Title Chinese Title Solution Difficulty
75 Sort Colors 颜色分类 Java Medium
215 Kth Largest Element in an Array 数组中的第 K 个最大元素 Java Medium
347 Top K Frequent Elements 前 K 个高频元素 Java Medium
451 Sort Character sBy Frequency 根据字符出现频率排序 Java Medium

08.数学

# English Title Chinese Title Solution Difficulty
9 Palindrome Number 回文数 Java Easy
136 SingleNumber 只出现一次的数字 Java Easy
137 SingleNumber Ⅱ 只出现一次的数字 Ⅱ Java Medium
206 SingleNumber Ⅲ 只出现一次的数字 Ⅲ Java Medium
233 Number of Digit One 数字 1 的个数 Java Hard
365 Water and Jug Problem 水壶问题 Java Medium
400 Nth Digit 第 N 个数字 Java Hard

数据结构相关

返回目录

01.数组和矩阵

# English Title Chinese Title Solution Difficulty
136 Product of Array Except Self 除自身以外数组的乘积 Java Medium

02.字符串

# English Title Chinese Title Solution Difficulty
14 Longest Common Prefix 最长公共前缀 Java Easy
415 Add Strings 字符串相加 Java Easy

03.树

# English Title Chinese Title Solution Difficulty
100 Same Tree 相同的树 Java Easy
101 Symmetric Tree 对称二叉树 Java Easy
104 Maximum Depth of Binary Tree 二叉树的最大深度 Java Easy
106 Construct Binary Tree from Inorder and Postorder Traversal 从中序与后序遍历序列构造二叉树 Java Medium
110 Balanced Binary Tree 平衡二叉树 Java Easy
111 Minimum Depth of Binary Tree 二叉树的最小深度 Java Easy
112 Path Sum 路径总和 Java Easy
113 Path Sum Ⅱ 路径总和 Ⅱ Java Medium
124 Binary Tree Maximum Path Sum 二叉树中的最大路径和 Java Hard
226 Invert Binary Tree 翻转二叉树 Java Easy
337 House Robber Ⅲ 打家劫舍 Ⅲ Java Medium
404 Sum of Left Leaves 左叶子之和 Java Easy
437 Path Sum Ⅲ 路径总和 Ⅲ Java Easy
513 Find Bottom Left Tree Value 找树左下角的值 Java Medium
543 Diameter of Binary Tree 二叉树的直径 Java Easy
572 Subtree of Another Tree 另一个树的子树 Java Easy
617 Merge Two Binary Trees 合并二叉树 Java Easy
637 Average of Levels in Binary Tree 二叉树的层平均值 Java Easy
671 Second Minimum Node In a Binary Tree 二叉树中第二小的节点 Java Easy
687 Longest Univalue Path 最长同值路径 Java Easy

04.哈希表

# English Title Chinese Title Solution Difficulty
128 Longest Consecutive Sequence 最长连续序列 Java Hard
560 Subarray Sum Equals K 和为 K 的子数组 Java Medium
974 Subarray Sums Divisible by K 和可被 K 整除的子数组 Java Medium

05.栈和队列

# English Title Chinese Title Solution Difficulty
84 Largest Rectangle in Histogram 柱状图中最大的矩形 Java Hard
85 Maximal Rectangle 最大矩形 Java Hard
739 Daily Temperatures 每日温度 Java Medium

06.图

# English Title Chinese Title Solution Difficulty
207 Course Schedule 课程表 Java Medium
210 Course Schedule Ⅱ 课程表 Ⅱ Java Medium

07.位运算

08.链表

# English Title Chinese Title Solution Difficulty
2 Add Two Numbers 两数相加 Java Medium
19 Remove Nth Node From End of List 删除链表的倒数第 N 个节点 Java Medium
21 Merge Two Sorted Lists 合并两个有序链表 Java Easy
23 Merge k Sorted Lists 合并 K 个排序链表 Java Hard
24 Swap Nodes in Pairs 两两交换链表中的节点 Java Medium
25 Reverse Nodes in k-Group K 个一组翻转链表 Java Hard
61 Rotate List 旋转链表 Java Medium
82 Remove Duplicates from Sorted List Ⅱ 删除排序链表中的重复元素 Ⅱ Java Medium
83 Remove Duplicates from Sorted List 删除排序链表中的重复元素 Java Easy
86 Partition List 分隔链表 Java Medium
92 Reverse Linked List Ⅱ 反转链表 Ⅱ Java Medium
109 Convert Sorted List to Binary Search Tree 有序链表转换二叉搜索树 Java Medium
142 Linked List Cycle Ⅱ 环形链表 Ⅱ Java Medium
143 Reorder List 重排链表 Java Medium
147 Insertion Sort List 对链表进行插入排序 Java Medium
148 Sort List 排序链表 Java Medium
160 Intersection of Two Linked Lists 相交链表 Java Easy
203 Remove Linked List Elements 移除链表元素 Java Easy
206 Reverse Linked List 反转链表 Java Easy
234 Palindrome Linked List 回文链表 Java Easy
328 Odd Even Linked List 奇偶链表 Java Medium
426 Convert Binary Search Tree to Sorted Doubly Linked List 将二叉搜索树转化为排序的双向链表 Java Medium
445 Add Two Numbers Ⅱ 两数相加 Ⅱ Java Medium
725 Split Linked List in Parts 分隔链表 Java Medium
1019 Next Greater Node In Linked List 链表中的下一个更大节点 Java Medium
1171 Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点 Java Medium