
leetcode
文章平均质量分 64
lingyun_fay
这个作者很懒,什么都没留下…
展开
-
Leetcode刷题系列(一)Subsets 与 Permutation
Leetcode刷题系列(一)Subsets 与 Permutation 这两种题型如果用Recursion的方法来解决,其思路是及其相似的。1.Subsets I内容Given a set of distinct integers, S, return all possible subsets.Note: Elements in a subset must be in non-descendi原创 2016-05-30 22:58:26 · 355 阅读 · 0 评论 -
Leetcode刷题系列(十七)Graph相关
本篇给出几道关于图的问题。但是没有深度搜索和广度搜索的题型,仅是与图结构相关的。Clone Graph 这道题为深度克隆一张图。我们分点和点的对应关系分别进行克隆。public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node == null) { return node; }原创 2016-07-06 20:12:00 · 739 阅读 · 0 评论 -
LeetCode刷题系列(十六)Some Little Questions
本篇给出了几道并没有太多技巧的的小问题。Reverse Words in a String 这道题倒转一个字符串中所有的单词。public String reverseWords(String s) { if (s == null || s.length() == 0) { return ""; } String[] array = s.split(" ");原创 2016-07-06 20:11:18 · 271 阅读 · 0 评论 -
LeetCode刷题系列(十)Dynamic Programming(3)补充
本篇为其他一些Dynamic Programming的题型。Backpack 背包问题是典型的动态规划问题,题目是给定若干个元素,每个元素有自己的体积,再给定一个容量为n的背包,将这些元素装进背包中,当然最大只能装进n体积,要求装得越多越好。像这样题型如果使用贪心算法就一定得不到最优的解了。相反,使用动规就很好解决了:f[i][j]表示将i个元素是可以装进容量为j的背包里。然后: if (j原创 2016-06-16 20:19:53 · 338 阅读 · 0 评论 -
LeetCode刷题系列(十五)Sums && Sort Colors
本篇包含关于2-sum、3-sum等关于给定和,求其中的数的题型,还有包含使用了3sum中前后指针的sort题型。2 Sum 给定目标值,求数组中和为目标值的两个数。使用一个hash可以巧妙地将时间复杂度降到O(n),之后的题可以参考此思路。public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> hash = ne原创 2016-07-06 12:05:18 · 322 阅读 · 0 评论 -
LeetCode刷题系列(十四)Sell Stock && Maximum SubArrays
Best Time to Buy and Sell Stock 给定n天的股票价格,最多只能做一次交易求最大收益。我们保留价格中的最小值,之后只要比较卖了它能得到的最大收益。public int maxProfit(int[] prices) { if (prices == null || prices.length == 0) { return 0; } i原创 2016-07-06 12:04:35 · 245 阅读 · 0 评论 -
LeetCode刷题系列(十三)SingleNumber && MajorityNumber
Single Number Single Number是找出一组数中唯一一个只出现一次的数,其他数均出现两次。我们使用异或操作即可轻松解决。 public int singleNumber(int[] A) { if(A == null || A.length == 0) { return -1; } int rst = 0; for (int i原创 2016-07-06 12:03:12 · 248 阅读 · 0 评论 -
LeetCode刷题系列(十二)Quick Questions
本篇给出了几道关于快速求解的小问题。Fast Power Fast Power 为快速求a^n % b=?。public int fastPower(int a, int b, int n) { if (n == 1) { return a % b; } if (n == 0) { return 1 % b; } long pr原创 2016-07-06 12:02:10 · 353 阅读 · 0 评论 -
LeetCode刷题系列(十一)Data Structure
本篇给出了几种考察一些数据结构的理解的题型。Min Stack Min Stack除了能实现普通stack的操作之外,还要求能返回stack中的最小值,所有的操作都要在O(1)的时间内完成。看到题目也许能想到stack本身的所有操作也是可以在O(1)的时间内完成的。那么这道题目其实使用了两个stack,其中一个保存当前数组中最小的数,每存入一个数,两个stack都push进一个,这样就不用保存最小原创 2016-06-20 16:12:10 · 320 阅读 · 0 评论 -
LeetCode刷题系列(九)Dynamic Programming(2)Longest Subxxxx
本篇为使用动态规划解决的的求字符串中的一些子串或子序列题的集合。Longest Increasing Subsequence 题目为求一个数组最长的上升子序列。我们使用动规来解决该问题,使用一个f[i]存放前i个数的最长上升子序列,如此可将原问题划分为若干个小问题。对于每个位置的i,我们检测它之前的位置如果有比他小的数,我们认为之前的f是可以用上的,这时我们取最大的就好了。代码:public in原创 2016-06-16 10:48:46 · 337 阅读 · 0 评论 -
LeetCode刷题系列(八)Dynamic Programming(1)Paths
本篇为一些Dynamic Programming的一些题型。动态规划可以被称作记忆化的搜搜,它与分治算法很相似,都是将大的问题分解成性质相同的小问题,然后利用已经解决好小问题的解来解决大问题。它与分治算法的区别在于它可以将小问题的解储存起来,当再次需要时直接取出即可,不需要重复计算,一般储存在数组中,这一点会比分治算法具有更低的时间复杂度。另外,动规解法需要注意的往往有需要储存的状态(解/答案),初原创 2016-06-16 09:34:50 · 250 阅读 · 0 评论 -
LeetCode刷题系列(七)Linked List
本篇是有关Linked List的几道相关题型,涉及链表的一些基本的操作和技巧,这些之前的blog也有提到过。Sort List 题目为把一个链表进行排序,要求时间复杂度为O(nlgn)。链表我们一般无法使用快排,因为它进行随机访问太耗时。回忆之前提到过的Merge Two Sorted List的解法,发现我们将链表一分为二然后再合并就好了,但是这里合并的两个链表都必须是有序的,因此我们需要使用原创 2016-06-14 23:03:14 · 386 阅读 · 0 评论 -
LeetCode刷题系列(六)Remove Duplicates
本篇主要是从Array和List中remove duplicates,其中Array和List有已经排好序的和未排序的。Remove Duplicates from Sorted Array 题目为删除有序数组中重复的元素。有序数组中的重复元素一定是与之前元素相等,我们很容易能判别出重复元素,但是我们删除元素时,数组后面的元素需要向前移动,这里我们使用了两个局部变量,一个i记录从头要访问的元素,一原创 2016-06-14 18:23:35 · 460 阅读 · 0 评论 -
Leetcode刷题系列(五)Binary Search Tree相关
Binary Search Tree是一种搜索的数据结构,它的定义为:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 本篇将展开一些Binary Search Tree的相关题型。Validate Binary Search Tree题原创 2016-06-13 22:58:26 · 375 阅读 · 0 评论 -
Leetcode刷题系列(四)Binary Tree相关
Binary Tree的遍历Binary Tree的遍历思想 Binary Tree的遍历一般有前序、中序、后序和层序遍历:前序遍历:根->左子树->右子树中序遍历:左子树->根->右子树后序遍历:左子树->右子树->根层序遍历:按层数来 具体遍历就不行进举例了。Binary Tree的遍历-使用递归 使用递归是二叉树遍历最为简单的一种方法,下面给出前序遍历的代码版本1:public原创 2016-06-13 19:40:41 · 241 阅读 · 0 评论 -
Leetcode刷题系列(三)Rotated Array相关
此部分关于在旋转数组中搜索的题目较多,因此需要扩展上一篇中二分查找算法的基础框架。补充:这种在array中进行搜索的题目都最好进行边界检查。Find Minimum in Rotated Sorted Array I 将一个有序的数组在中间某个地方进行旋转可以看成如图所示。此题为寻找数组中的最小值,即为图中红色圆圈部分。 题目可以复用二分查找的基本框架,关键在与target的选择,我们原创 2016-06-13 09:21:26 · 340 阅读 · 0 评论 -
Leetcode刷题系列(二)Binary Search
Binary Search的基础框架代码Bianry Search的基本思想 二分查找法是基于一组有序数上的查找,它的时间复杂度最坏为O(n),平均时间复杂度为O(lgn),空间复杂度为O(1)。由于它不需要借助额外的空间,并且大多数情况下(平均)性能较好,所以是应用较广的一种查找法。 接下来介绍一些其他查找方法的时间和空间复杂度: 查找算法 平均时间复杂度 最坏时间复杂度原创 2016-06-12 22:35:25 · 1003 阅读 · 0 评论 -
Leetcode刷题系列(十八)CombinationSum && WordLadder
本篇给出Combination Sum 和Word Ladder 这两种题型。Combination Sum 这道题为给出一个数组,使用数组中的数组成和为k的组合。使用前面提到的深度搜索,类似于第一篇提到的方法。public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) { Array原创 2016-07-06 20:12:46 · 363 阅读 · 0 评论