<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[eiwoqu的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/eiwoqu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; eiwoqu]]></copyright><item><title><![CDATA[[leetcode]Divide Two Integers]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27212505</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27212505</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 16:22:44 +0800</pubDate><description><![CDATA[Divide Two Integers
题意：写一个整数之间的除法，不可以用* / %运算符
解法：
         O(1):最暴力的方式一定是不停的试商，那么商的范围是连续的，所以一定可以采用二分的方式进行尝试，但因为题中要求不可以用*，所以要自己去实现一个mul(a,b)，当然采用位运算。每次乘法计算由于int位数是常数，所以是O(1)的，而商的范围是int，所以log(2^31)也]]></description><category></category></item><item><title><![CDATA[[leetcode]Implement strStr()]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27210943</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27210943</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 16:08:23 +0800</pubDate><description><![CDATA[Implement strStr()
题意：最经典的pattern匹配问题，题中要求把pattern匹配的位置到结尾都输出。
解法：
         O(n*m):Brute-force暴力不清楚能不能过
         O(n+m):KMP算法
public class Solution125 {
         int[]f;
   public String strStr(S]]></description><category></category></item><item><title><![CDATA[[leetcode]Remove Element]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27210525</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27210525</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 16:03:17 +0800</pubDate><description><![CDATA[Remove Element
题意：将一个list中某数删除，其他元素的顺序可以改变
解法：
         O(n):从左到右遍历list，遇到elem，直接不管。遇到非elem，把它放到前面对应的位置。
         O(n*logn):将数组排序，找到元素出现的地方，其他地方平移。
下面这代码又臭又长，我不能忍了，为何写出如此垃圾的代码。
public class Solu]]></description><category></category></item><item><title><![CDATA[[leetcode]Remove Duplicates from Sorted Array]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27209441</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27209441</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 15:53:25 +0800</pubDate><description><![CDATA[Remove Duplicates from Sorted Array
题意：将有序array中的重复元素删除
解法：还是看代码吧。
public class Solution127 {
   public int removeDuplicates(int[] A) {
             if (A.length==0){
                       return ]]></description><category></category></item><item><title><![CDATA[[leetcode]Swap Nodes in Pairs     Reverse Nodes in k-Group]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27209225</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27209225</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 15:50:58 +0800</pubDate><description><![CDATA[Swap Nodes in Pairs     Reverse Nodes in k-Group
题意：将一个链表，每k个元素翻转一次。
解法：首先获取链表的长度，确定有几个要翻转的序列。接下来每次读取k个元素，组成翻转后的list，加入ans。
public class Solution128 {
   public ListNode reverseKGroup(ListNode head]]></description><category></category></item><item><title><![CDATA[[leetcode]Merge k Sorted Lists]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27208615</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27208615</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 15:44:57 +0800</pubDate><description><![CDATA[Merge k Sorted Lists
题意：将k个有序的list归并。
解法：
         O(kn):每轮从k个list中挑出最小的元素。复杂度受k影响较大。
         O(logk*n):以每个list的head.val建立最小堆，每次拿出堆顶的list的元素，将该list后一位填上来，进行筛操作。注意后一位没有元素时，注意缩减heap的规模。
import jav]]></description><category></category></item><item><title><![CDATA[[leetcode]Generate Parentheses]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27208283</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27208283</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 15:40:16 +0800</pubDate><description><![CDATA[Generate Parentheses
题意：生成所有括号个数是n的，合法的括号排列。
解法：dfs生成括号。当生成数目=2*n时，判断左右括号数目是否相等，相等则合理，否则不合理。中间加一些剪枝，当左括号数=右括号数时，只添加做括号，当左括号数目>n时，直接剪枝掉。
import java.util.ArrayList;
 
public class Solution131 {
    ]]></description><category></category></item><item><title><![CDATA[[leetcode]Valid Parentheses]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27207853</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27207853</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 15:35:08 +0800</pubDate><description><![CDATA[Valid Parentheses
题意：判断所给括号序列是否合理。
解法：
         O(N):遇到左括号直接入栈，遇到右括号讲栈顶元素pop出来，若栈空或者pop出来的左括号不匹配，返回false。最后序列结束后，若栈空则合理，否则不合理。
import java.util.Stack;
 
public class Solution132 {
   public boo]]></description><category></category></item><item><title><![CDATA[[leetcode]Remove Nth Node From End of List]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27207413</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27207413</guid><author>eiwoqu</author><pubDate>Tue, 27 May 2014 15:30:40 +0800</pubDate><description><![CDATA[Remove Nth Node From End of List
题意：删除链表中从后往前数第n个元素，保证n有效。要求只链表只能有一次访问。
解法：维护一个大小为n的链表引用的数组。每访问一个元素，将其添加到该数组中，若数组满了，直接把最老的覆盖即可。当遍历到末尾时，那么在数组中对应位置所存的引用就是需要删除的元素的父亲，注意若要删除的元素是第一个元素的话，要单独处理。
public cl]]></description><category></category></item><item><title><![CDATA[[leetcode]4Sum]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27096597</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27096597</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 17:21:52 +0800</pubDate><description><![CDATA[4Sum
题意：给定一个array，找出四个数的组合相加等于target
解法：将每两个数的和放入形如key=integer,value=arraylist的hashtable，对target-数对的和进行判断，看是否存在这样的key，并且index与数对不冲突。由于枚举过程是枚举任意两个不同的数字，而枚举的判断过程是在一个arraylist中进行，这样的list的大小是O(n^2)级别的，所]]></description><category></category></item><item><title><![CDATA[[leetcode]Letter Combinations of a Phone Number]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27093851</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27093851</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 16:55:28 +0800</pubDate><description><![CDATA[Letter Combinations of a Phone Number
题意：手机键盘按几个键，到底有多少个输入可能呢？
解法：每出现一个数字，将原来集合拓展即可。
import java.util.ArrayList;
 
public class Solution134 {
   public ArrayList letterCombinations(String digits]]></description><category></category></item><item><title><![CDATA[[leetcode]3Sum Closest]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27093405</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27093405</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 16:50:39 +0800</pubDate><description><![CDATA[3Sum Closest
题意：给定一个array和一个target，找出三个数的和与target最接近，输出这三个数的和。
解法：
         O(N^3)：暴力方法，竟然能过，不能理解。
public int threeSumClosest2(int[] num, inttarget) {
                   intclosest=Integer.MAX_VA]]></description><category></category></item><item><title><![CDATA[[leetcode]3Sum]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27090897</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27090897</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 16:28:19 +0800</pubDate><description><![CDATA[3Sum
题意：给定一个数组，找出所有其中三个数的和是target的组合
解法：
         O(N^2):先做个预处理，把其中某个数出现的次数大于等于3的全都去掉，也就是新array里一个数最多出现2次，除了0可以出现3次。建议key=Integer, value=arrayList的哈希表，代表一个数出现在array的哪些index上。
         对所有数对进行枚举，看t]]></description><category></category></item><item><title><![CDATA[[leetcode]Longest Common Prefix]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27089189</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27089189</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 16:06:48 +0800</pubDate><description><![CDATA[Longest Common Prefix
题意：所有字符串最长的前缀，输出即可
解法：模拟一遍即可，注意””的情况以及不要越界。
public class Solution138 {
   public String longestCommonPrefix(String[] strs) {
             int n=strs.length;
             if]]></description><category></category></item><item><title><![CDATA[[leetcode]Roman to Integer]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27088689</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27088689</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 16:01:23 +0800</pubDate><description><![CDATA[Roman to Integer
题意：给定一个罗马数字，将其转化为int。输入在1-3999内
解法：字符串从开头进行匹配，如果出现在一个位置有两种匹配，匹配更长的。例子就是IV，可以匹配I也可以匹配IV。
public class Solution139 {
   public int romanToInt(String s) {
             String[] stri]]></description><category></category></item><item><title><![CDATA[[leetcode]Integer to Roman]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27088297</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27088297</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 15:57:20 +0800</pubDate><description><![CDATA[Integer to Roman
题意：输入一个int，转化成roman数字输出，int取值范围是1-3999
解法：罗马数字的每一位都有唯一表示，直接枚举每一位，将其对应符号输出就可以了
public class Solution140 {
   public String intToRoman(int num) {
             String[] number=new S]]></description><category></category></item><item><title><![CDATA[[leetcode]Container With Most Water]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/27087561</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/27087561</guid><author>eiwoqu</author><pubDate>Mon, 26 May 2014 15:49:46 +0800</pubDate><description><![CDATA[Container With Most Water
题意：
         在X轴上给定一些数，找出最大的可盛水的面积，这个面积是指两个数的较小的数*两个数之间的距离。比如第一个数和第三个数分别为5,7，所围盛水面积为Min(7,5)*(3-1)=10。
         暴力解法不说了，能不能过不清楚。
         O(N)：
         参考http://www.cnb]]></description><category></category></item><item><title><![CDATA[[leetcode]Regular Expression Matching]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/26727943</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/26727943</guid><author>eiwoqu</author><pubDate>Fri, 23 May 2014 17:33:25 +0800</pubDate><description><![CDATA[Regular Expression Matching
题意：实现这个所谓的正则表达式匹配
           .可以匹配任何一个单独的char，
      *可以让*之前的符号变成0个，或者任意多个
对给出样例进行解释：
isMatch("aa","a") → false      a只能匹配一个a，剩余一个a无法匹配
isMatch("aa","aa") → true     ]]></description><category></category></item><item><title><![CDATA[[leetcode]Palindrome Number]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/26727885</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/26727885</guid><author>eiwoqu</author><pubDate>Fri, 23 May 2014 17:32:56 +0800</pubDate><description><![CDATA[Palindrome Number
题意：判断一个int是不是回文的，注意认为负数都不是回文的。不可以使用额外的空间。
解法：对于负数，直接false，0的话，true，小于10的正数，直接true。
接下来通过不停的/10，得到数的位数，每次把数的最高位和最低位截取出来，判断一下。
public class Solution143 {
         publicboolean is]]></description><category></category></item><item><title><![CDATA[[leetcode]String to Integer (atoi)]]></title><link>https://blog.youkuaiyun.com/eiwoqu/article/details/26727765</link><guid>https://blog.youkuaiyun.com/eiwoqu/article/details/26727765</guid><author>eiwoqu</author><pubDate>Fri, 23 May 2014 17:31:56 +0800</pubDate><description><![CDATA[String to Integer (atoi)
题意：把字符串转化为int。
           题意说得极不清楚，”        +0000003246awg2457  ”，类似这样的输入样例，竟然是合理的，应该返回3246，首先要把前面的空格都去掉，正负号去掉，把其他的非数字截掉，然后去掉多余的开头的0，判断长度是否超过10，如果长度为10，判断是否正数大于2^31-1，负数小于2^]]></description><category></category></item></channel></rss>