自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [leetcode]Divide Two Integers

Divide Two Integers题意:写一个整数之间的除法,不可以用* / %运算符解法:         O(1):最暴力的方式一定是不停的试商,那么商的范围是连续的,所以一定可以采用二分的方式进行尝试,但因为题中要求不可以用*,所以要自己去实现一个mul(a,b),当然采用位运算。每次乘法计算由于int位数是常数,所以是O(1)的,而商的范围是int,所以log(2^31)也

2014-05-27 16:22:44 303

原创 [leetcode]Implement strStr()

Implement strStr()题意:最经典的pattern匹配问题,题中要求把pattern匹配的位置到结尾都输出。解法:         O(n*m):Brute-force暴力不清楚能不能过         O(n+m):KMP算法public class Solution125 { int[]f; public String strStr(S

2014-05-27 16:08:23 331

原创 [leetcode]Remove Element

Remove Element题意:将一个list中某数删除,其他元素的顺序可以改变解法:         O(n):从左到右遍历list,遇到elem,直接不管。遇到非elem,把它放到前面对应的位置。         O(n*logn):将数组排序,找到元素出现的地方,其他地方平移。下面这代码又臭又长,我不能忍了,为何写出如此垃圾的代码。public class Solu

2014-05-27 16:03:17 340

原创 [leetcode]Remove Duplicates from Sorted Array

Remove Duplicates from Sorted Array题意:将有序array中的重复元素删除解法:还是看代码吧。public class Solution127 { public int removeDuplicates(int[] A) { if (A.length==0){ return

2014-05-27 15:53:25 266

原创 [leetcode]Swap Nodes in Pairs Reverse Nodes in k-Group

Swap Nodes in Pairs     Reverse Nodes in k-Group题意:将一个链表,每k个元素翻转一次。解法:首先获取链表的长度,确定有几个要翻转的序列。接下来每次读取k个元素,组成翻转后的list,加入ans。public class Solution128 { public ListNode reverseKGroup(ListNode head

2014-05-27 15:50:58 369

原创 [leetcode]Merge k Sorted Lists

Merge k Sorted Lists题意:将k个有序的list归并。解法:         O(kn):每轮从k个list中挑出最小的元素。复杂度受k影响较大。         O(logk*n):以每个list的head.val建立最小堆,每次拿出堆顶的list的元素,将该list后一位填上来,进行筛操作。注意后一位没有元素时,注意缩减heap的规模。import jav

2014-05-27 15:44:57 515

原创 [leetcode]Generate Parentheses

Generate Parentheses题意:生成所有括号个数是n的,合法的括号排列。解法:dfs生成括号。当生成数目=2*n时,判断左右括号数目是否相等,相等则合理,否则不合理。中间加一些剪枝,当左括号数=右括号数时,只添加做括号,当左括号数目>n时,直接剪枝掉。import java.util.ArrayList; public class Solution131 {

2014-05-27 15:40:16 304

原创 [leetcode]Valid Parentheses

Valid Parentheses题意:判断所给括号序列是否合理。解法:         O(N):遇到左括号直接入栈,遇到右括号讲栈顶元素pop出来,若栈空或者pop出来的左括号不匹配,返回false。最后序列结束后,若栈空则合理,否则不合理。import java.util.Stack; public class Solution132 {   public boo

2014-05-27 15:35:08 259

原创 [leetcode]Remove Nth Node From End of List

Remove Nth Node From End of List题意:删除链表中从后往前数第n个元素,保证n有效。要求只链表只能有一次访问。解法:维护一个大小为n的链表引用的数组。每访问一个元素,将其添加到该数组中,若数组满了,直接把最老的覆盖即可。当遍历到末尾时,那么在数组中对应位置所存的引用就是需要删除的元素的父亲,注意若要删除的元素是第一个元素的话,要单独处理。public cl

2014-05-27 15:30:40 256

原创 [leetcode]4Sum

4Sum题意:给定一个array,找出四个数的组合相加等于target解法:将每两个数的和放入形如key=integer,value=arraylist的hashtable,对target-数对的和进行判断,看是否存在这样的key,并且index与数对不冲突。由于枚举过程是枚举任意两个不同的数字,而枚举的判断过程是在一个arraylist中进行,这样的list的大小是O(n^2)级别的,所

2014-05-26 17:21:52 378

原创 [leetcode]Letter Combinations of a Phone Number

Letter Combinations of a Phone Number题意:手机键盘按几个键,到底有多少个输入可能呢?解法:每出现一个数字,将原来集合拓展即可。import java.util.ArrayList; public class Solution134 {   public ArrayList letterCombinations(String digits

2014-05-26 16:55:28 299

原创 [leetcode]3Sum Closest

3Sum Closest题意:给定一个array和一个target,找出三个数的和与target最接近,输出这三个数的和。解法:         O(N^3):暴力方法,竟然能过,不能理解。public int threeSumClosest2(int[] num, inttarget) {                   intclosest=Integer.MAX_VA

2014-05-26 16:50:39 294

原创 [leetcode]3Sum

3Sum题意:给定一个数组,找出所有其中三个数的和是target的组合解法:         O(N^2):先做个预处理,把其中某个数出现的次数大于等于3的全都去掉,也就是新array里一个数最多出现2次,除了0可以出现3次。建议key=Integer, value=arrayList的哈希表,代表一个数出现在array的哪些index上。         对所有数对进行枚举,看t

2014-05-26 16:28:19 311

原创 [leetcode]Longest Common Prefix

Longest Common Prefix题意:所有字符串最长的前缀,输出即可解法:模拟一遍即可,注意””的情况以及不要越界。public class Solution138 {   public String longestCommonPrefix(String[] strs) {             int n=strs.length;             if

2014-05-26 16:06:48 275

原创 [leetcode]Roman to Integer

Roman to Integer题意:给定一个罗马数字,将其转化为int。输入在1-3999内解法:字符串从开头进行匹配,如果出现在一个位置有两种匹配,匹配更长的。例子就是IV,可以匹配I也可以匹配IV。public class Solution139 {   public int romanToInt(String s) {             String[] stri

2014-05-26 16:01:23 319

原创 [leetcode]Integer to Roman

Integer to Roman题意:输入一个int,转化成roman数字输出,int取值范围是1-3999解法:罗马数字的每一位都有唯一表示,直接枚举每一位,将其对应符号输出就可以了public class Solution140 {   public String intToRoman(int num) {             String[] number=new S

2014-05-26 15:57:20 314

原创 [leetcode]Container With Most Water

Container With Most Water题意:         在X轴上给定一些数,找出最大的可盛水的面积,这个面积是指两个数的较小的数*两个数之间的距离。比如第一个数和第三个数分别为5,7,所围盛水面积为Min(7,5)*(3-1)=10。         暴力解法不说了,能不能过不清楚。         O(N):         参考http://www.cnb

2014-05-26 15:49:46 314

原创 [leetcode]Regular Expression Matching

Regular Expression Matching题意:实现这个所谓的正则表达式匹配           .可以匹配任何一个单独的char,      *可以让*之前的符号变成0个,或者任意多个对给出样例进行解释:isMatch("aa","a") → false      a只能匹配一个a,剩余一个a无法匹配isMatch("aa","aa") → true     

2014-05-23 17:33:25 336

原创 [leetcode]Palindrome Number

Palindrome Number题意:判断一个int是不是回文的,注意认为负数都不是回文的。不可以使用额外的空间。解法:对于负数,直接false,0的话,true,小于10的正数,直接true。接下来通过不停的/10,得到数的位数,每次把数的最高位和最低位截取出来,判断一下。public class Solution143 {         publicboolean is

2014-05-23 17:32:56 350

原创 [leetcode]String to Integer (atoi)

String to Integer (atoi)题意:把字符串转化为int。           题意说得极不清楚,”        +0000003246awg2457  ”,类似这样的输入样例,竟然是合理的,应该返回3246,首先要把前面的空格都去掉,正负号去掉,把其他的非数字截掉,然后去掉多余的开头的0,判断长度是否超过10,如果长度为10,判断是否正数大于2^31-1,负数小于2^

2014-05-23 17:31:56 243

原创 [leetcode]Reverse Integer

Reverse Integer题意:输入一个int,把这个int翻转输出。解法:         也没什么复杂度可分析吧。         负数情况单独考虑,对于正数翻转后大于2^31-1的,负数翻转后小于-2^32的,直接返回MAX和MIN。public class Solution145 {   public int reverse(int x) {       b

2014-05-23 17:31:28 272

原创 [leetcode]ZigZag Conversion

ZigZag Conversion题意:给一个字符串,与nrows,逐行输出对应的zigzag图形。Zigzag图形可以理解成类似vvvvvvvvvvvvvv的图形(注意,每个v是相连的,没有中间的缝隙)。解法:         O(n)解法:对于最上面一行和最下面的一行,找出对应起始点,分别为1和nrows,之后每个点都比前一个点大2*nrows-2               

2014-05-23 17:30:49 387

原创 [leetcode]Longest Palindromic Substring

Longest Palindromic Substring题意:找出一个字符串中最长的回文子串解法:         O(N^2):DP解法:                            以f[i][j]代表字符串第i到第j个字符组成的子串是否是回文。                            若a[i]==a[j],则f[i][j]=f[i+1][j-1

2014-05-23 17:29:11 326

原创 [leetcode]Add Two Numbers

Add Two Numbers:题意:给定两个链表,表示两个数字,链表头部存的是数字的个位,输出一个链表,表示两数字的和。解法:         O(m+n):维护目前进位变量temp,初始化=0。当两个链表都不为空时,将两链表当前node的值加和加上进位变量temp % 10成为ans的新节点,该值/ 10存到进位变量temp里。若只有一个节点不为空,操作类似。当两个链表都为空时,主

2014-05-23 17:24:08 306

原创 [leetcode]Longest Substring Without RepeatingCharacters

Longest Substring Without RepeatingCharacters题意:输入一个字符串,输出这个字符串的某个最长的子串,子串符合里面所有出现字母出现次数不超过1次。解法:暴力就不说了。         O(n):从头至尾遍历每个char,找到当前这个char结尾的最长子串长度。维护一个hashtable来记录当前某个字符是否在当前子串中,初始时都为-1。当某个c

2014-05-23 17:23:40 293

原创 [leetcode]Median of Two Sorted Arrays

Median of Two Sorted Arrays:题意:给定两个被排序过的数组(从小到大),找出两个数组合并之后数组的中位数,时间复杂度在O(log(m+n))。通过函数返回值可以看出,当两数组长度和偶数时,返回中间两个数的平均数。解法:首先观察要求的时间复杂度,一定不能采用将两个sorted array merge的方法。             O(log Min(m,n))方法

2014-05-23 17:22:34 355

原创 [leetcode]Two Sum

Two Sum:题意:在数组里找两个数,和等于target,把两个数的index按从小到大输出。保证解唯一。注意题目要求输出的是index+1。解法:O(N^2)方法:暴力枚举任意两个数,能不能过不清楚。           O(N*lgN)方法:把所有数排序,N*lgN,使用left标记与right标记。Left初始指向最小的数,right初始指向最大的数,判断两个数的和sum与ta

2014-05-23 17:20:45 399 2

空空如也

空空如也

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

TA关注的人

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