自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Sliding Window Maximum

[b]Sliding Window Maximum[/b]Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window....

2015-12-25 05:15:21 106

原创 Gray Code

首先简单介绍一下什么是格雷码。在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。有关格雷码的详细讲解请大家查阅网上其它资料,这里主要讲解格雷码是如何编码的。我们不妨从简单例子开始进一步看一下什么是格雷码,假设n代表格雷码的位数,当n=1时,我们只有两种选择...

2015-12-24 02:11:12 101

原创 Wildcard Matching

[b]Wildcard Matching[/b]给定两个字符串p和q,判断两个字符串是否匹配。规则是:‘*’可以代表任意长度的字符串,也可以代表空串;‘?’代表任意单个的字符串。例如:isMatch("aa", "a") → falseisMatch("aa", "aa") → trueisMatch("aaa", "aa") → falseisMatch(&quo

2015-12-24 01:36:18 82

原创 Kth Largest Element in an Array

[b]Kth Largest Element in an Array[/b]给定一个无序的数组,找出第K大的元素,假定k一直有效,1 ≤ k ≤ array's length。例如给定:nuts[] = [3,2,1,5,6,4], k = 2返回 5如果我们用Arrays的sort方法将数组排序,然后输出nums[nums.length - k]就是第k大的元素。代码如下...

2015-12-23 10:33:27 112

原创 Majority Element II

[b]Majority Element II[/b]给定一个长度为n的数组,找出所有出现次数大于[n/3]的元素。这道题是Majority Element的变形,如果次数大于[n/2]时,只可能有一个元素,这里要求出现次数多于[n/3]次,也就是说有可能有两个元素,同样我们可以用哈希表来做,这样时间复杂度为O(n),空间复杂度为O(n)。代码如下:[code="java"]pu...

2015-12-23 10:05:38 87

原创 Majority Element

[b]Majority Element[/b]给定一个长度为n的数组,从中找出出现次数最多的元素,这个元素出现的次数多余[n/2]次。假设数组不为空并且始终存在一个majority元素。解决这道题有很多种方法,但是时间复杂度和空间复杂度各不相同,在这里我们用三种不同的方法解这道题。1,最简单的方法就是先将数组排好序,根据题意我们知道,出现最多的元素肯定是中间的元素。我们直接...

2015-12-23 08:44:31 79

原创 动态规划总结(三)

House Robber问题属于一维的动规问题,这篇文章给大家介绍一下。[b]1,House Robber[/b]一个小偷去一条街上偷东西,假设这条街上有n个房子,每个房子里都有特定的现金,但是小偷不能偷连续的房子,那样会触发警报,问怎样才能偷到最多的钱。我们把这条街抽象成一个数组,数组里的值代表了房子里现金的数目,假设小偷拿了第0个房子的钱,那么第1个房子的钱就不能拿,否则就...

2015-12-22 07:52:57 137

原创 动态规划总结(二)

这篇文章介绍unique path等一系列的题目,它们属于二维动态规划的问题,[url=http://kickcode.iteye.com/blog/2260196]之前一篇文章[/url]讲过最长公共子序列(LCS), 最长递增子序列(LIS), 最长非降子序列。有兴趣的可以看一下,这些都是经典的二维动规问题。[b]1,Unique Paths[/b]给定一个m*n的矩阵,一个机器人...

2015-12-21 02:32:57 131

原创 动态规划总结(一)

动态规划在算法中属于难的问题了,在leetcode中属于中等偏上难度,但是动规是面试容易问到的,因此掌握基本的动规题目很有必要。下面列举leetcode中用DP处理的题目,其中有些用到贪心算法,就不单列出来了,本质上贪心也是动态规划的一个特例。动态规划重要的是能找出递推式,这需要我们多加练习,需要有一个过程。有关买卖股票的题目有几道,这里列举前两道题。[b]1,Best Time to...

2015-12-20 13:37:09 107

原创 Remove Duplicate from Unsorted List

之前介绍过在排好序的链表中删除节点,只需要遍历一遍链表,所以时间复杂度为O(n)。这篇文章讨论对无序链表的去重问题。给定一个无序链表,删除里面的重复元素,我们用bruce force来进行的话时间复杂度为O(n^2),我们从头节点开始判断,如果有相等的元素,就将当前节点的next指向下一个节点的next。每个元素都要遍历一次它们后面的元素。代码如下:[code="java"]pub...

2015-12-20 13:08:42 77

原创 并查集总结

leetcode中有关并查集的题目不多,这里现列举一道简单的题目,理解并查集的思想。[b]Longest Consecutive Sequence[/b]给定一个未排序的整型数组,找出最长的连续子序列。要求时间复杂度为O(n)。例如:给定nums[] = {100, 4, 200, 1, 3, 2}输出:4 最长连续子序列为(1,2,3,4)我们用哈希处理元素是否...

2015-12-18 03:48:28 62

原创 Clone Graph

之所以把这道题单独拿出来,是因为通过它我们可以了解到图的结构,以及如何处理,我们分别用递归,广搜和深搜来完成这道题。[b]Clone Graph[/b]复制一个无向图,图中每个节点都有一个label和一个neighbors集合。解决图的题,因为图中存在环,我们要判断哪些点已经访问过了,做上标记,以防止进入死循环。这里我们用哈希函数来判断一个顶点是否被访问过,如果没被访问过就加入...

2015-12-17 09:25:58 65

原创 Binary Tree的题目总结(四)

本文列举leetcode中两个关于构造二叉树的题目。1,Construct Binary Tree from Inorder and Postorder Traversal已知中序遍历序列,和后序遍历序列,通过这两个序列构造二叉树。通过后序遍历序列的最后元素,我们总能找到根节点,然后通过这个值可以将中序序列分为两部分,然后在递归左右两部分。代码如下:[code="java"]...

2015-12-16 13:25:38 128

原创 Binary Tree的题目总结(三)

这篇文章主要列举数组或者链表如何转换为二叉树。[b]1,Convert Sorted Array to Binary Search Tree[/b]将一个有序数组变为二叉平衡树。因为数组有序,我们通过二分法,依次将数组元素变为数节点,代码如下:[code="java"]/** * Definition for a binary tree node. * publ...

2015-12-16 08:15:07 73

原创 Binary Tree的题目总结(二)

这篇文章列出了leetcode中有关二叉树遍历的题目,之前在[url=http://kickcode.iteye.com/blog/2261080]二叉树的深搜和广搜[/url]中介绍过,这里再重复一下,因为这都是最基本的操作,需要我们熟练掌握。[b]1,Binary Tree Level Order Traversal[/b]二叉树的广度优先搜索,输出所有节点的值,说的广搜,我们一律...

2015-12-16 04:59:26 73

原创 Binary Tree的题目总结(一)

与数组和链表相比,树的题目比它们要难一些,我们往往通过递归来处理树的题目,下面是对leetcode有关树操作的几道题目,包括找出树的所有路径,计算完全二叉树节点个数,二叉搜索树的最近公共祖先,普通二叉树的最近公共祖先。[b]1,Binary Tree Paths[/b]给定一个二叉树,输出所有根节点到叶子节点的路径。用深度优先遍历(DFS),依次保留搜索过的节点。代码如下:...

2015-12-16 03:40:57 116

原创 Bit Manipulation总结(二)

这篇文章介绍通过位运算求解子集,反转二进制数,判断是否为2的幂等。[b]1,Number of 1 Bits[/b]给定一个无符号的整数,输出它包含1的个数。通过右移,依次与1位与,得到1的个数。 代码如下:[code="java"]public class Solution { // you need to treat n as an unsigned va...

2015-12-15 17:12:34 80

原创 Bit Manipulation总结(一)

在[url=http://kickcode.iteye.com/blog/2260251]位运算这篇文章中[/url]已经介绍了关于位运算的一些知识,这里主要介绍leetcode中出现的有关位运算的题目。有关找单独元素的有三道题,要求空间复杂度为O(n),空间复杂度为O(1),我们都可以通过位运算来解决。[b]1,Single Number[/b]给定一个数组,每个元素都出现了两次...

2015-12-15 16:50:45 178

原创 Parentheses总结

这篇文章总结leetcode中有关括号的问题,最简单的是判断输入的括号是否有效,例如“))”就不属于有效的括号,括号的题目无非是添加,删除,找到最长有效括号等。最长有效括号是一道DP问题,我们在DP总结中结合最长回文子串一起列出。下面列举几个基本的题目。[b]1,Valid Parentheses[/b]给定一个字符串序列,它包含'(', ')', '{', '}', '[' , ']...

2015-12-15 09:21:42 160

原创 Palindrome总结

这篇文章总结leetcode中回文的题目,其中关于palindrome partition有两道题目,第二道属于动态规划的题目,我们动态规划的总结中讨论。简单的讲回文就是将它翻转后和原来一样。[b]1,Palindrome Number[/b]给定一个数字,判断它是否为回文数。对于数字来讲,负数不属于回文数,对于正数,我们将它逆转,然后与原始值比较,如果相等就为回文数。代码如下...

2015-12-15 05:44:09 127

原创 Java垃圾回收机制

java中的垃圾回收机制(Garbage Collection )可以自动清除在堆中不用的对象,为java程序员提供了方便,在c/c++中,我们就需要手动去释放堆中的内存。在java中对象都是通过引用来使用的,如果没有引用指向这个对象,那么这个对象就不可到达,我们就没法使用和处理这个对象,GC机制就是释放这些不可达对象所占用的内存。为了提高效率,JVM优化了GC机制,在不同的情况下...

2015-12-14 17:13:36 74

原创 Remove Duplicate from List(链表去重)

之前在[url=http://kickcode.iteye.com/blog/2263414]一篇文章里[/url]总结了一部分链表的题目,这里主要例举一下链表去重的问题。链表去重有很多种情况,有些要求我们只保留单独出现的元素,有些要求我们使重复的元素只能出现一次。对于可能会删除头结点的题目,我们一般采用新建一个helper节点,使helper指向head,进行操作,最后返回helper.next...

2015-12-14 13:15:35 304

原创 Remove Duplicate from Array(数组去重)

给定一个数组,判断是否存在重复元素,或者让你找出重复的元素。遇到这类问题我们应该先想用哈希表,位运算,双指针是否可以解决,根据具体的情况选择合适的方法。下面是leetcode中有关数组去重或查重的几道题目。1,Contains Duplicate给定一个数组,判断里面是否存在重复元素,如果存在就返回true,如果不存在就返回false.既然是判断是否存在重复元素,我们首先想到哈...

2015-12-14 05:24:31 455

原创 Permutation总结

有关排列的问题我们可以与组合比较来考虑,解决这类问题我们都采用回溯法,在组合中不用考虑顺序,而在排列中就要考虑顺序,例如(1,2,3)和(2,1,3),在组合的概念中是相等的,但它们是不同的排列。下面列举leetcode中有关permutations的几道题目。[b]1,Permutation[/b]给定一个数组numbers ,输出所有可能的排列。例如:numbers = {1,...

2015-12-13 18:05:05 1000

原创 Combination Sum总结

关于组合的题目我们一般用回溯法来解决。我的理解回溯法就是按照要求一直找下去,如果找到一个结果就把这个结果记录下来,然后返回上一层,如果有其它路线可以走就继续尝试,如果没有,就继续返回上一层。回溯的实现一般用递归来完成。这里介绍一下关于组合的问题,以及它的一些延伸。[b]1,Combination[/b]给定两个正整数n和k,返回所有长度为k的组合,组合中的元素为1...n。例如:n...

2015-12-13 06:31:33 144

原创 2sum, 3sum, 4sum和3sum closest总结

[size=medium] 2sum, 3sum, 4sum和3sum closest是四道类似的题目,后面三个都是2sum的延伸。[/size][b]1,2sum[/b]给定一个数组numbers[]和一个目标数值target,从数组中找到两个元素,使它们的和等于目标元素。返回这两个值的索引indices,并且index1 大于index2。(假设只有一个结果)例如:输入: nu...

2015-12-13 04:27:09 217

原创 堆栈变体以及栈和队列的相互实现

前面讲到了如何用数组以及链表实现一个基本的堆栈和队列,这篇文章介绍如何实现一个可以在O(1)时间复杂度下得到最小元素的堆栈,以及用堆栈实现一个队列,用队列实现一个堆栈。1,实现一个可以得到最小元素的堆栈, 要求pop(),push(),getMin()的时间复杂度都为O(1).如果我们按照普通的思路,类中有两个成员变量,value和minValue,当pop一个元素后,我们就需要更...

2015-12-12 09:55:29 113

原创 链表总结

[b]链表总结[/b]链表也是计算机中一个重要的数据结构,有单向链表,双向链表等。和数组一样都是一种线性存储结构,但是它不能像数组那样通过下标查找数据,我们必须要知道链表的头结点,然后依次遍历来查找结果,在这一点上链表劣于数组;但是如果我们想删除一个数据,链表就比数组方便了很多,可以在O(1)的时间复杂度下完成,而数组删除元素需要移动其它元素,对于一个长度为n的数组删除一个节点i,时间复杂度为...

2015-12-11 14:20:42 66

原创 MongoDB基本操作以及JDBC连接

[b]MongoDB[/b]Mac上使用MongoDB的方法。官网下载安装包,安装完毕后,如果是默认路径,就在根目录下[color=darkblue][i]创建一个data文件夹[/i][/color],存放数据库中的数据。开启MongoDB服务:在terminal中,切换到bin目录下执行./mongod就开启了MongoDB服务连接数据库:新创建一个terminal窗口...

2015-12-11 07:56:48 2482

原创 哈希表的实现

实现一个哈希表,首先我们要知道哈希表可以干什么,包含什么方法,实现哪些功能。哈希表又叫散列表,是根据关键码值(Key, value)而直接进行访问的数据结构。oracle文档里面提到,用哈希表进行检索和存储,key首先要完成hashcode方法,以确定这个key属于哪个区间,也就是说具有相同hashcode的被放在同一块区间里,hashcode往往是取模得出的结果。确定了位置,我们...

2015-12-10 02:27:46 101

原创 JDBC链接MySQL数据库

[b]JDBC链接MySQL数据库[/b]首先我们到官网(mysql.com)下载MySQL数据库,安装完毕后,我们还要去下载MySQL JDBC 驱动,然后我们就可以在一个java工程中使用JDBC链接数据库了。具体过程:1,加载驱动。将JDBC驱动的jar文件加入到工程的classpath中。我们通常在工程中创建一个lib文件夹,用来盛放需要的jar文件,然后添加JARs到cl...

2015-12-09 13:16:03 69

原创 IT随笔之减少程序bug

写程序难免会出错,不管你有多细心,当我们运行程序的时候,总是会报错,有编译时的错误也有运行时的错误,尽管有很多工具可以帮我们debug,我认为我们不能依赖debug工具,我们要在写程序的时候就尽量的避免错误。在这里主要说一下编译错误,也就是因为粗心而写错。避免逻辑上的错误就得靠提高自身编程水平了。在面试的时候,我们往往都是在白板上写代码,如果平时我们依赖编译器帮我们找错误,那我们在面试中就...

2015-12-08 11:20:32 91

原创 图的深搜和广搜

[b]DFS(深度优先遍历)[/b]图的深度优先搜索和树的深度优先搜索思想很相似,都是从一个顶点v出发尽可能像纵深方向搜索,访问了顶点v,下一个访问与v相邻的顶点v1,然后以v1作为初始节点,依次访问后面的节点。对于深度优先搜索的实现,我们采用堆栈来实现。递归实现DFS的伪代码:[code="java"]void dfs(vertex v) { if(v == null) re...

2015-12-07 13:08:50 421

原创 解析Singleton开发模式

[b]单例模式(Singleton pattern)[/b]一个singleton 类是指这个类只能有一个实例,当系统只要求一个类的唯一实例时,我们就采用单例模式。要实现一个singleton类,我们首先要设置一个全局的点,以便其它类可以得到这个实例,其次很重要的一点是构造函数必须设定为私有,具体的实现通常有两种方式:饿汉式和懒汉式。从字面上去理解,懒汉式就是在不用的时候不去new这个实例,用...

2015-12-06 09:56:39 73

原创 Java多线程之Semaphore

Semaphore(信号量),是用来控制同时访问特定资源的线程数量,它通过计数来协调各个线程,以保证合理的使用公共资源。我的理解是:信号量控制着一个线程池中并发线程的数量。就好像我们去一家饭店吃饭,这家饭店最多可以同时供应50人,如果饭店中已经坐满50人,这时新来的客人就必须等待,直到有客人离开他们才可以进入,并且总的数量不可以超过50人。这里饭店就好比线程池,饭店里的服务人员和厨师就好比共享的资...

2015-12-05 02:34:44 130

原创 java中的线程同步

在java中,每一个线程都是由Thread类对象创建和控制的。通常我们有两种方式来创建一个线程,一种是继承java.lang.Thread 类,第二种是创建类的时候实现Runnable接口。下面分别介绍两种方式。1,继承Thread类首先创建Thread子类的一个实例,然后重写run方法,然后子类的实例必须调用start()方法之后run方法才被执行. 代码如下:[code="ja...

2015-12-04 03:57:02 73

原创 MAC中安装5.7.9 Mysql的问题

去官网mysql.com下载相应地程序包,下载完成后,打开mysql.dmg文件,按照他的默认设置进行安装,值得我们注意的是,5.7以后安装的mysql不再使用旧版的默认密码:root,安装的过程中将出现一个弹窗提示,那里是一个临时密码,切记要保存这个密码,以便第一次连接数据库时使用。打开终端,在终端中输入 sudo /usr/local/mysql/support-files/mysql...

2015-12-03 04:48:39 105

原创 二叉树的深搜和广搜

二叉树是计算机中一个重要的数据结构,在这里主要谈一下二叉树的深度优先搜索(DFS)和广度优先搜索(BFS)。所谓DFS,就是沿着树的深度一直往下,一直到达一个叶子节点,然后再返回遍历剩余的节点。根据树的性质,树结构不存在环,因此遍历的时候不需要标记。如果在遍历一个图的时候,因为图中有环的存在,因此需要标记访问过的节点,以防止程序进入死循环。言归正传,树的DFS有三种方式,分别为:前序遍历,...

2015-12-02 12:40:55 863

原创 从堆和栈的角度看参数传递

在java中,参数的传递方式只有一种:值传递。但是这个“值”的的含义我们不能单从字面理解。确切的说它分为两种:一个是基本类型的值传递,一个是对象的值传递。对于基本类型来讲,值传递很容易理解,就是把实参的的值传递给形参,例如 [code="java"]public static void add(int a) { a = a + 3; System.out.println...

2015-12-02 03:01:53 257

原创 几种常见的排序算法

常见的排序算法有冒泡排序,简单选择排序,直接插入排序,快速排序,归并排序,堆排序,桶排序等,这篇文章中我们主要分析前五种排序,包括它们的实现,稳定性分析,时间复杂度分析以及空间复杂度分析。以下都假设给定一个长度为n的数组1,冒泡排序在冒泡排序中, 我们从数组的开始进行比较,如果第一个元素大于第二个元素,我们就将两个元素互换,接下来我们比较第二个元素和第三个元素,如果第二个元素大于第...

2015-12-01 12:39:21 69

空空如也

空空如也

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

TA关注的人

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