Skip to content

xiangwang456/leetcode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

my leetcode answers.

updating...

LinkedList

# title Solution Time Space Difficulty Tag Note
24 Swap Nodes in Pairs C++ O(n) O(1) easy
61 Rotate List C++ O(n) O(1) easy 先变成循环链表再断开
82 Remove Duplicates from Sorted List II C++ O(n) O(1) medium 把有重复的元素都删除
83 Remove Duplicates from Sorted List C++ O(n) O(1) easy 删除重复的结点,只保留一个

Tree

# title Solution Time Space Difficulty Tag Note
307 Range Sum Query - Mutable C++ ctor :O(n) ,update : O(logn) , sum : O(logn) O(n) medium 线段树
24 Longest Univalue Path C++ O(n) O(h) easy dfs
654 Maximum Binary Tree C++ O(n) O(n) medium
652 Find Duplicate Subtrees C++ O(n) O(n) medium
684 Redundant Connection C++ O(n) O(n) medium

Hash Table

# title Solution Time Space Difficulty Tag Note
1 Two Sum C++ O(n) O(n) easy
3 Longest Substring Without Repeating Characters C++ O(n) O(n) medium
36 Valid Sudoku C++ O(n^2) O(n) medium
159 Longest Substring with At Most Two Distinct Characters C++ O(n) O(n) hard
202 Happy Number C++ O(k) O(k) easy
323 Number of Connected Components in an Undirected Graph C++ O(n) O(n) medium
356 Line Reflection C++ O(n) O(n) medium
387 First Unique Character in a String C++ O(n) O(n) easy
737 Sentence Similarity II C++ O(n) O(n) medium 并查集,字符串在map里的位置作为并查集的查询条件
734 Sentence Similarity C++ O(n) O(n) easy
721 Accounts Merge C++ O(n) O(n) medium 1. 并查集 2. email-name,email-id,set[id]-emails, name-emails
554 Brick Wall C++ O(n) O(n) medium 记录每一行右边界出现的次数,从长度减去它就是最少要穿过的数目
457 4Sum II C++ O(n^2) O(n^2) medium 统计前两个数组两两元素的和并统计次数,再和后两个进行比较
lintcode Find the Weak Connected Component in the Directed Graph C++ O(n^2) O(n^2) medium 并查集

Queue

# title Solution Time Space Difficulty Tag Note
362 Sliding Window Maximum C++ O(n) O(n) medium lintcode deque
122 Largest Rectangle in Histogram C++ O(n) O(n) medium lintcode
126 Max Tree C++ O(n) O(n) hard lintcode decending stack
367 Expression Tree Build C++ O(n) O(n) medium lintcode

|1||C++|O(n)|O(n)|medium|lintcode||

Heap

# title Solution Time Space Difficulty Tag Note
130 Heapify C++ O(n) O(n) medium lintcode Heap
364 Trapping Rain Water II C++ O(mn(logm+logn) O(m*n) hard lintcode
81 Data Stream Median C++ O(nlogn) O(n) hard lintcode two heap

|1||C++|O(n)|O(n)|medium|lintcode||

Data Structure

# title Solution Time Space Difficulty Tag Note
134 LRU Cache C++ O(1) O(k) hard lintcode

|1||C++|O(n)|O(n)|medium|lintcode||

Math

# title Solution Time Space Difficulty Tag Note
13 Roman to Integer C++ O(n) O(1) easy
12 Integer to Roman C++ O(n) O(1) medium
400 Nth Digit C++ O(lgn) O(1) easy

Sort

# title Solution Time Space Difficulty Tag Note
88 Merge Sorted Array C++ O(n) O(1) easy 从后向前插入
147 Insertion Sort List C++ O(n) O(n) medium 找到要插入位置的节点,再插入
75 Sort Colors C++ O(n) O(1) medium 把数组分为三个部分,0 ,1,2
88 Merge Sorted Array C++ O(n) O(1) easy 从后向前遍历两个数组
148 Sort List C++ O(nlgn) O(lgn) medium 先把两个链表拆成两个链表,递归两个指针合并两链表
179 Largest Number C++ O(nlogn) O(1) medium 通过将两个数字组合成一个字符串形式对数字按照askii进行排序,再将字符串依次组合成一个数字
274 H-Index C++ O(n) O(n) medium 1、排序,找论文数大于引用数的 2、用一个数组记录引用数是0到n(大于n的记为n)之间被引用的文章有多少,再进行累加
347 Top K Frequent Elements C++ O(nlogn) O(n) medium 按照元素的数量分成若干个捅,从后向前从捅中取元素
451 Sort Characters By Frequency C++ O(n) O(n) medium 与上题类似
692 Top K Frequent Words C++ O(nlgn) O(n) medium

Two Pointers

# title Solution Time Space Difficulty Tag Note
19 Remove Nth Node From End of List C++ O(n) O(1) easy 快慢指针,快指针先走n步,再同时开始走
86 Partition List C++ O(n) O(1) medium 双指针。用两个指针分别表示比x大和小的两个链表,最后将小表的尾指向大表的头
141 Linked List Cycle C++ O(n) O(1) easy 快慢指针
142 Linked List Cycle II C++ O(n) O(n) medium fast在相遇点再走k步到达循环链表的起点,与从头开始走k步同一个位置
143 Reorder List C++ O(n) O(1) medium 1、快慢指针分拆链表 2、后半部分reverse 3、再合并两个链表
283 Move Zeroes C++ O(n) O(1) easy 从前向后遍历,设置一个标记元素,如果不是零则和后面的元素交换并自增标记元素,是零则不自增,这样零的会跑到最后
287 Find the Duplicate Number C++ O(n) O(n) medium
344 Reverse String C++ O(n) O(1) easy 前指针和后指针不断交换直到相遇
345 Reverse Vowels of a String C++ O(n) O(1) easy 细节:aeiou字符串弄成const string 2、比对时都用小写
349 Intersection of Two Arrays C++ O(n + m) O(n + m) easy 1、哈希法:将第一个数组放入set中,遍历第二个数据 2、对两个数组排序再同事比对
567 Permutation in String C++ O(n) O(n) medium 利用哈希表将第一个字符串的的元素都存起来,再遍历第二个字符串,在第一个字符串长度大小的窗口里检查是否全部出现了哈希表里字符。注意字符串哈表使用vector count(256)而不是vector
363 Trapping Rain Water C++ O(n) O(1) medium lintcode

|1||C++|O(n)|O(n)|medium|lintcode||

Recursion

# title Solution Time Space Difficulty Tag Note
100 Same Tree C++ O(n) O(h) easy 当都为空则停止迭代返回true,否则迭代
104 Maximum Depth of Binary Tree C++ O(n) O(n) easy 注意停止条件
110 Balanced Binary Tree C++ O(n) O(h) easy 左子树和右子树高度是否相差1
111 Minimum Depth of Binary Tree C++ O(n) O(h) easy
129 Sum Root to Leaf Numbers C++ O(n) O(h) medium 使用辅助函数,用0作为和 。停止条件:如果是空则return 0 ,如果左子树和右子树都不存在,则返回当前结点的值 ,其他情况递归左子树和右子树。
298 Binary Tree Longest Consecutive Sequence C++ O(n) O(h) medium
669 Trim a Binary Search Tree C++ O(n) O(h) easy 如果当前结点值小于L或大于R,则递归返回右子树或左子树,再分别递归左子树和右子树
108 Convert Sorted Array to Binary Search Tree C++ O(n) O(h) easy 二分法构建BST
98 Validate Binary Search Tree C++ O(n) O(h) medium 递归,设置上下边界的值,注意边界值设置成numeric_limits::max() min()
105 Construct Binary Tree from Preorder and Inorder Traversal C++ O(n) O(n) medium 构造一个map记录中序中的序号,从该序号以前是左子树,以后是右子树
106 Construct Binary Tree from Inorder and Postorder Traversal C++ O(n) O(n) medium 同上构造一个map,递归创建左子树和右子树
109 Convert Sorted List to Binary Search Tree C++ O(n) O(n) medium 使用快慢指针找到中间节点,中间节点的左子树从开始到中间节点的构造的bst,右子树是从中间节点的一下个节点到最后节点构造的bst。
114 Flatten Binary Tree to Linked List C++ O(n) O(n) medium 将左子树放在右子树的位置上,并将原来的右子树放在新右子树的右子树
404 Sum of Left Leaves C++ O(n) O(h) easy 构造辅助函数,加入适否是左子树标记。如果叶子结点(左右子树为空),如果是左子树,则返回叶子的值,否则返回0,递归左子树和右子树
437 Path Sum III C++ O(n^2) O(h) easy 辅助函数记录当前的值,再去遍历左子树和右子树
671 Second Minimum Node In a Binary Tree C++ O(n^2) O(n) medium 使用辅助函数,以及set存储(里面元素是从小到大排列的)当前节点的值,如果set>2则删除末尾的结点,便利左子树和右子树。则此时set保存了所有节点中最小的两个值,取后面的那个即可
116 Populating Next Right Pointers in Each Node C++ O(n) O(log n) medium 如果是空则退出,如果存在左子树则把左子树的next指向右子树,如果存在右子树且存在next,则右子树的next指向next的左子树
1 C++ O(n) O(n) medium

Binary Search

# title Solution Time Space Difficulty Tag Note
34 Search for a Range C++ O(logn) O(1) medium 二分法
35 Search Insert Position C++ O(n^2) O(n) medium 二分法
69 Sqrt(x) C++ O(logn) O(1) medium 二分法判断sqrt,注意的是边界值
74 Search a 2D Matrix C++ O(logm+logn) O(1) medium 看成一个一维数组,二分法
33 Search in Rotated Sorted Array C++ O(logn) O(1) medium 每次在有序的那一半元素里找,抛弃另一半元素
81 Search in Rotated Sorted Array II C++ O(logn) O(1) medium 如果nums[left] == nums[mid] 则++left
162 Find Peak Element C++ O(n) O(n) medium 二分法中间值大于后面那个元素则证明前面一部分一定有极值(因为o是无穷小)否则右边一定有极值
153 Find Minimum in Rotated Sorted Array C++ O(n) O(n) medium 如果没有旋转则是最左边的元素,如果有旋转,则找乱序里面最左边的元素
154 Find Minimum in Rotated Sorted Array II C++ O(n) O(n) medium 如果mid和左边相同则left ++ ,判断一开始是否乱序时条件是nums[left] <= nums[right]
278 First Bad Version C++ O(logn) O(1) easy

Binary Search Tree

# title Solution Time Space Difficulty Tag Note
230 Kth Smallest Element in a BST C++ O(max(h,k)) O(h) medium 把元素从根节点到左子树开始入栈,从最小元素开始出栈,直到第k个最小元素为止
235 Lowest Common Ancestor of a Binary Search Tree C++ O(h) O(1) easy 公共祖先的值一定是比小的元素大,比大的元素小,按照这个要求去遍历即可
450 Delete Node in a BST C++ O(h) O(h) medium 左子树为空右子树为空都不为空三种情况,都不为空时将右子树中最小的点变为替换结点
285 Inorder Successor in BST C++ O(h) O(1) medium 如果有右子树,则找右子树中最左边的结点,如果没有右子树,则找大于当前结点的右子树的最左结点
270 Closest Binary Search Tree Value C++ O(h) O(1) easy 两个变量gap和closet,不断遍历左子树找最小的gap的closet值

|201|Segment Tree Build|C++|O(n)|O(n)|medium|lintcode|segment tree , BST| |202|Segment Tree Query|C++|O(lgn)|O(1)|medium|lintcode|segment tree , BST| |203|[Segment Tree Modify](Segment Tree Modify)|C++|O(lgn)|O(1)|medium|lintcode|segment tree , BST| |205|Interval Minimum Number|C++|O(logn)|O(logn)|medium|lintcode|segment tree 的应用|

|1||C++|O(n)|O(n)|medium|lintcode||

Breadth-First Search

# title Solution Time Space Difficulty Tag Note
102 Binary Tree Level Order Traversal C++ O(n) O(n) easy 层序遍历广度优先,使用一个队列遍历当前层元素,把当前层元素的左子树和右子树放在队列中的后面
103 Binary Tree Zigzag Level Order Traversal C++ O(n) O(n) medium 与上题相同,多加一个判断是否reverse
117 Populating Next Right Pointers in Each Node II C++ O(n) O(1) medium 记录prev、curr、next三个结点,双层遍历,外层遍历遍历所有层,内层设置每个子节点的next
133 Clone Graph C++ O(n) O(n) medium 广度优先遍历,使用队列保存当前遍历的结点,使用map保存原图和新图的结点映射,遍历时判断原来是否已经遍历过此节点,如果已经遍历过只更新neighbour,没有的话加入映射并更新neighbour
207 Course Schedule C++ O(V + E) O(E) medium 拓扑排序图使用二维数组表示,再用数组保存每个节点的入度,把入度为0的节点放入队列中,遍历图。遍历到的点入度减1,入度为0则放入队列,看最后是否还有入度不为0的点
210 Course Schedule II C++ O(V + E) O(E) medium 与上题类似,把入度为0的点依次加入结果集中即可
261 Graph Valid Tree C++ O(n) O(n) medium 可以使用并查集。图是有效的树:1、没有环 2、是连通的 ,其中2等价于图节点数等于边数减一
127 Word Ladder C++ O(n) O(n) medium BFS 每次遍历当前队列中的元素,当变换字母时加入新的队列中

Depth-First Search

# title Solution Time Space Difficulty Tag Note
112 Path Sum C++ O(n) O(h) easy 递归,停止条件:root为空或者是叶子节点且值等于sum
113 Path Sum II C++ O(n) O(h) medium 记录迭代的路径经过的点,把当前节点的值先放进去,如果满足sum则放入结果集,再pop出当前元素
199 Binary Tree Right Side View C++ O(n) O(h) medium 用一个数字来表示当前所在的层,每层只放一个节点,如果结果集数目小于当前层数则把当前节点放进去,先遍历右子树再遍历左子树
236 Lowest Common Ancestor of a Binary Tree C++ O(n) O(n) medium 如果左子树和右子树里都有目标节点则root是lca
200 Number of Islands C++ O(m*n) O(m*n) medium 遍历每个值,如果是island则dfs更新周围的点为water
257 Binary Tree Paths C++ O(n*h) O(h) easy dfs 当前路径和结果集

Backtracking

  1. 定义一个解空间,它包含问题的解 2) 用适于搜索的方式组织该空间 3) 用深度优先法搜索该空间,利用限界函数避免移动到不可能产生解的子空间。
# title Solution Time Space Difficulty Tag Note
78 Subsets C++ O(n * 2^n) O(1) medium 遍历每个元素的时候,找到每个元素所在的子集并添加到结果集里
39 Combination Sum C++ O(k * n^k) O(k) medium dfs,先给候选元素排序,再记录每次循环的位置避免重复

|1||C++|O(n)|O(n)|medium|||

Combination Sum

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published