- 博客(27)
- 收藏
- 关注
原创 坐标型动态规划
坐标型动态规划:state: f[x]表示从起点到坐标x; f[x, y]表示从起点走到坐标x, y;function: 研究走到x, y之前的一步(一)Trianglehttps://leetcode.com/problems/triangle/description/题目:给出一个三角形,返回从顶到底和最小的路径和,只能移动到下一行的相邻位置。如:[ [2], ...
2018-02-22 01:18:21
366
原创 Heap/Priority Queue问题(堆)
(一)Ugly Number题目:写一个程序来检测一个整数是不是丑数。 丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8 是丑数,14不是。默认1为丑数;解答:若一个数可以被2或3或5整数,则将其更新为整除后的数。重复该操作直到不能被3个数中的任意一个整除。若最终结果为1,说明是丑数,否则不是;代码:class Solution {
2018-02-06 13:19:20
402
原创 Hash高频
(一)LRU (Least Recently Used) cache https://leetcode.com/problems/lru-cache/description/题目:为LRU缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。 获取数据get(key):如果缓存中存在key,则获取其数据值,否则返回-1。
2018-02-06 05:14:07
159
原创 Min Stack(栈高频)
Min Stackhttps://leetcode.com/problems/min-stack/description/题目:设计一个栈,不仅满足栈的基本功能,还能在固定的时间取到栈中的最小元素;解答:使用两个栈:一个栈stack正常存储元素; 另一个栈minStack与stack同步存储、删除元素,但是存储的内容为当前
2018-02-01 02:45:39
203
原创 Iterator in Stack/Queue
(一)Flatten Nested List Iterator题目:要求用迭代器将嵌套的链表展开,如 [1,2[3,4],5] 返回[1,2,3,4,5]。要求实现函数 next() 以返回下一个展开的数字,函数hasNext() 以返回是否存在下一个需要展开的数。 题目已定义数据类型NestedInteger中包含3个函数:isInteger()用来判断是整数还是嵌套
2018-02-01 01:19:36
312
原创 反转栈或队列中的元素
(一)Implement Stack using Queues题目:用队列的方式实现栈的操作;解答:用两个队列的方式实现;优化:使用一个队列,但是在push操作时,注意将元素顺序反转: public void push(int x) { queue1.offer(x); for
2018-01-23 01:06:56
1957
1
原创 Two Sum
(一)Two Sumhttps://leetcode.com/problems/two-sum/description/题目:对一个无重复元素的无序数组,找到满足两个数和为target的组合并返回两数下标(该数组必定且只存在一个满足条件的组合,且一个元素不可使用两次);解答:法一:HashMap:将 nums[index] 和 index 作为key, value值存入hash
2018-01-22 07:04:52
116
原创 Partition
(一) Sort Colors题目:一个无序数组仅仅含有0,1,2三种元素,要求按照0,1,2的顺序排列;解答:调用两次快速选择的方法;代码:class Solution { public void sortColors(int[] nums) { quickSelect(nums, 0); quickSelect(nums, 1);
2018-01-21 11:28:43
191
原创 Two Pointers
两根指针问题,分为两类:同向指针、相向指针,时间复杂度均为O(n)(一)Move Zeroes (同向指针)https://leetcode.com/problems/move-zeroes/description/题目:将数组中所有0元素移动到数组最右边,非零元素顺序不变;解答:用快慢两指针。快指针每次向前挪一位,若遇到不为0的数,则将快慢指针位置交换并将慢指针挪一位(依次遍
2018-01-21 09:29:24
316
原创 Quick Sort(快速排序)
Quick Sort : 时间复杂度为O(logn)思路:参考https://www.cnblogs.com/luomeng/p/10587492.htmlpublic void quickSort(int[] nums, int low, int high) { if (low >= high) { return; } ...
2018-01-19 14:20:43
623
原创 有序数组
(一)merge sorted arrayshttps://leetcode.com/problems/merge-sorted-array/description/题目:将有序数组nums2合并到有序数组nums1中(num1空间足够,m、n分别表示两个数组里初始化的元素个数;解答:从nums1的第m+n-1个位置开始更新(从最大的开始),如果从最小的开始更新需要不断
2018-01-17 23:42:05
806
原创 链表高频
(一)copy list with random pointerhttps://leetcode.com/problems/copy-list-with-random-pointer/description/题目:复制一个含有random指针的链表;解答:分为三步:1.复制链表值:1 -> 2 ->3 -> null 变成 1 -> 1' -> 2 -> 2' -> 3 -> 3'
2018-01-14 09:38:37
97
原创 链表Reverse List
(一)reverse linked listhttps://leetcode.com/problems/reverse-linked-list/description/题目:逆转链表;解答:从头到尾依次变换指针方向;代码:class Solution { public ListNode reverseList(ListNode head) { L
2018-01-12 09:14:04
207
原创 链表Dummy Node
(一)Partition Listhttps://leetcode.com/problems/partition-list/description/题目:给出一个链表和一个x值,要求返回一个顺序链表使得小于x的数在链表前面,大于等于x的数在链表后面,保证节点顺序不变。 例如:1->3->2->4->2, 3 变成:1->2->2->3->4解答:建立两个新的左
2018-01-12 09:11:52
4780
原创 Tree Traversal(树的遍历)
(一)Binary Tree Preorder Traversal https://leetcode.com/problems/binary-tree-preorder-traversal/description/题目:给定二叉树,返回其前序遍历(根左右);解答:使用栈或者递归;代码:*************栈****************class Solution
2018-01-09 12:43:59
1005
原创 排列搜索问题
采用DFS,顺序有关。(一)Permutationshttps://leetcode.com/problems/permutations/description/题目:解答:代码:
2018-01-01 08:15:16
187
原创 组合搜索问题
采用DFS的思想,顺序无关。递归三要素:递归的定义、递归的拆解、递归的出口。(一)Subsetshttps://leetcode.com/problems/subsets/description/题目:给出一个数组,返回该数组的全部子集;解答:递归函数(详见代码) 采用index以避免重复子集第一次犯错:list是动态的,即使在添加到结果
2018-01-01 01:04:55
739
原创 图上的搜索问题(word ladder & world ladder ||)
(一)word ladderhttps://leetcode.com/problems/word-ladder/description/题目:给出起始两个单词和一个字典,每次只能变化一个字母,且变化后的单词必须存在于字典当中。要求返回变换成功的最少变换次数。解答:(BFS)将起始单词放入队列,建立一个hashset存放已经变换过的单词(避免重复); 若队列不空
2017-12-30 00:12:45
273
原创 棋盘问题/矩阵问题 (Number of Islands)
矩阵是图的特殊情况,常采用BFS。注意点:1、判断边界时,将判断条件封装成函数,增加代码可读性;2、坐标变换数组:int[] deltaX = {1, 0, 0, -1}; int[] deltaY = {0, 1, -1,0}; for ( int i =
2017-12-29 07:05:02
636
原创 Topological Sorting(拓扑排序必考题)
http://www.lintcode.com/en/problem/topological-sorting/题目:将图中节点进行拓扑排序(假设图中至少存在一个拓扑序列) class DirectedGraphNode { int label; ArrayList neighbors;
2017-08-10 09:25:13
939
原创 Clone Graph
http://www.lintcode.com/en/problem/clone-graph/题目:完成图的深度复制(包含点和边)解答:1、使用BFS获得图中所有的点; 2、遍历所有点,将图中每个点复制并存入HashMap中; 3、遍历所有点,将每个点的neighbor值依次放入其neighbors的arraylist中。
2017-08-09 11:32:07
151
原创 Graph Valid Tree
http://www.lintcode.com/en/problem/graph-valid-tree/题目:判断图是否是树 n 表示 0 ~ n - 1个点, edges表示边,如【0,1】表示连接0和1的边(无重复边)解答:需要满足两个条件: (1)边的个数 = n - 1; (2) 所有的边可以将全部点连通;将每个点作为key
2017-08-09 08:48:14
236
原创 Binary Tree Serialization
http://www.lintcode.com/en/problem/binary-tree-serialization/题目:将二叉树序列化,将序列化的二叉树还原;解答:按照二叉树序列化规则,如: 3 / \9 20 / \ 15 7序列化后为:{3,9,20,#,#,15,7}需注意大括号、逗号第一次犯错:sb.toString()
2017-08-07 16:12:30
209
原创 Binary Tree Level Order Traversal
http://www.lintcode.com/en/problem/binary-tree-level-order-traversal/题目:给定二叉树,按层级顺序输出。如:二叉树{3,9,20,#,#,15,7} 3 / \ 9 20 / \ 15 7输出:[ [3], [9,20], [15,7]]...
2017-08-07 11:39:58
125
原创 Intersection of Two Arrays(多种方法)
http://www.lintcode.com/en/problem/intersection-of-two-arrays/题目:求两数组的交集(两数组长度分别为m,n),不包含重复元素方法一:Hash时间复杂度 O(n + m) 空间复杂度 O(min(m, n))解答:将第一个数组的元素存入HashSet, 遍历第二个数组若有元素存在于HashSet中,
2017-08-01 15:45:57
288
原创 Subarray子数组
该题型多采用prefixSum的方法:(一)Maximum Subarray (Frequent ++)http://www.lintcode.com/en/problem/maximum-subarray/题目:找到数组中总和最大的子集并返回该子集总和;解答:将该数组的prefixSum存储在新数组中(亦可覆盖原数组节省空间),因为sum(i ~ j) = prefixSum
2017-08-01 09:26:00
940
原创 排序链表
(一)Sort Listhttps://leetcode.com/problems/sort-list/description/题目:将链表排序,使得时间复杂度为O(nlogn)解答:方法一:归并排序:将链表分成左右两等分,对于每个等分进行递归调用,直到每个等分只含有一个节点; 第一次犯错:在拆分左右时,忘记将左链表尾部指向null;代码:cl...
2017-07-31 09:35:26
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人