自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 LeetCode刷题系列(十一)Data Structure

本篇给出了几种考察一些数据结构的理解的题型。Min Stack  Min Stack除了能实现普通stack的操作之外,还要求能返回stack中的最小值,所有的操作都要在O(1)的时间内完成。看到题目也许能想到stack本身的所有操作也是可以在O(1)的时间内完成的。那么这道题目其实使用了两个stack,其中一个保存当前数组中最小的数,每存入一个数,两个stack都push进一个,这样就不用保存最小

2016-06-20 16:12:10 295

原创 LeetCode刷题系列(十)Dynamic Programming(3)补充

本篇为其他一些Dynamic Programming的题型。Backpack  背包问题是典型的动态规划问题,题目是给定若干个元素,每个元素有自己的体积,再给定一个容量为n的背包,将这些元素装进背包中,当然最大只能装进n体积,要求装得越多越好。像这样题型如果使用贪心算法就一定得不到最优的解了。相反,使用动规就很好解决了:f[i][j]表示将i个元素是可以装进容量为j的背包里。然后: if (j

2016-06-16 20:19:53 328

原创 LeetCode刷题系列(九)Dynamic Programming(2)Longest Subxxxx

本篇为使用动态规划解决的的求字符串中的一些子串或子序列题的集合。Longest Increasing Subsequence  题目为求一个数组最长的上升子序列。我们使用动规来解决该问题,使用一个f[i]存放前i个数的最长上升子序列,如此可将原问题划分为若干个小问题。对于每个位置的i,我们检测它之前的位置如果有比他小的数,我们认为之前的f是可以用上的,这时我们取最大的就好了。代码:public in

2016-06-16 10:48:46 320

原创 LeetCode刷题系列(八)Dynamic Programming(1)Paths

本篇为一些Dynamic Programming的一些题型。动态规划可以被称作记忆化的搜搜,它与分治算法很相似,都是将大的问题分解成性质相同的小问题,然后利用已经解决好小问题的解来解决大问题。它与分治算法的区别在于它可以将小问题的解储存起来,当再次需要时直接取出即可,不需要重复计算,一般储存在数组中,这一点会比分治算法具有更低的时间复杂度。另外,动规解法需要注意的往往有需要储存的状态(解/答案),初

2016-06-16 09:34:50 227

原创 LeetCode刷题系列(七)Linked List

本篇是有关Linked List的几道相关题型,涉及链表的一些基本的操作和技巧,这些之前的blog也有提到过。Sort List  题目为把一个链表进行排序,要求时间复杂度为O(nlgn)。链表我们一般无法使用快排,因为它进行随机访问太耗时。回忆之前提到过的Merge Two Sorted List的解法,发现我们将链表一分为二然后再合并就好了,但是这里合并的两个链表都必须是有序的,因此我们需要使用

2016-06-14 23:03:14 360

原创 LeetCode刷题系列(六)Remove Duplicates

本篇主要是从Array和List中remove duplicates,其中Array和List有已经排好序的和未排序的。Remove Duplicates from Sorted Array  题目为删除有序数组中重复的元素。有序数组中的重复元素一定是与之前元素相等,我们很容易能判别出重复元素,但是我们删除元素时,数组后面的元素需要向前移动,这里我们使用了两个局部变量,一个i记录从头要访问的元素,一

2016-06-14 18:23:35 416

原创 Leetcode刷题系列(六)Merge Array&&List

此篇介绍Array和List的Merge相关操作,涉及两个或多个Array和List。Merge Two Sorted Lists  题目为给定两个有序的链表,返回混合他们之后的一个有序链表。此题目的关键在与需要有一个dummyNode。这里说下dummyNode,它主要是在List相关题目中出现,当我们对于List进行操作的时候,对List的Head可能也需要进行操作(有可能把Head删掉),或者

2016-06-14 17:24:40 231

原创 Leetcode刷题系列(五)Binary Search Tree相关

Binary Search Tree是一种搜索的数据结构,它的定义为:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。  本篇将展开一些Binary Search Tree的相关题型。Validate Binary Search Tree题

2016-06-13 22:58:26 344

原创 Leetcode刷题系列(四)Binary Tree相关

Binary Tree的遍历Binary Tree的遍历思想  Binary Tree的遍历一般有前序、中序、后序和层序遍历:前序遍历:根->左子树->右子树中序遍历:左子树->根->右子树后序遍历:左子树->右子树->根层序遍历:按层数来  具体遍历就不行进举例了。Binary Tree的遍历-使用递归  使用递归是二叉树遍历最为简单的一种方法,下面给出前序遍历的代码版本1:public

2016-06-13 19:40:41 226

原创 Leetcode刷题系列(三)Rotated Array相关

此部分关于在旋转数组中搜索的题目较多,因此需要扩展上一篇中二分查找算法的基础框架。补充:这种在array中进行搜索的题目都最好进行边界检查。Find Minimum in Rotated Sorted Array I    将一个有序的数组在中间某个地方进行旋转可以看成如图所示。此题为寻找数组中的最小值,即为图中红色圆圈部分。    题目可以复用二分查找的基本框架,关键在与target的选择,我们

2016-06-13 09:21:26 322

原创 Leetcode刷题系列(二)Binary Search

Binary Search的基础框架代码Bianry Search的基本思想  二分查找法是基于一组有序数上的查找,它的时间复杂度最坏为O(n),平均时间复杂度为O(lgn),空间复杂度为O(1)。由于它不需要借助额外的空间,并且大多数情况下(平均)性能较好,所以是应用较广的一种查找法。   接下来介绍一些其他查找方法的时间和空间复杂度: 查找算法 平均时间复杂度 最坏时间复杂度

2016-06-12 22:35:25 950

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除