﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Jeff Lee-随笔分类-algorithm</title><link>http://www.blogjava.net/jefflee/category/32313.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 20 May 2011 09:06:24 GMT</lastBuildDate><pubDate>Fri, 20 May 2011 09:06:24 GMT</pubDate><ttl>60</ttl><item><title>据说是微软的一道面试题</title><link>http://www.blogjava.net/jefflee/archive/2011/05/19/350637.html</link><dc:creator>Jeff Lee</dc:creator><author>Jeff Lee</author><pubDate>Thu, 19 May 2011 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/jefflee/archive/2011/05/19/350637.html</guid><wfw:comment>http://www.blogjava.net/jefflee/comments/350637.html</wfw:comment><comments>http://www.blogjava.net/jefflee/archive/2011/05/19/350637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jefflee/comments/commentRss/350637.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jefflee/services/trackbacks/350637.html</trackback:ping><description><![CDATA[一个整数数列，元素取值可能是1~N（N是一个较大的正整数）中的任意一个数，相同数值不会重复出现。设计一个算法，找出数列中符合条件的数对的个数，满足数对中两数的和等于N+1。
复杂度最好是O(n)，如果是O(n2)则不得分。<br /><br />网上大多数人的做法时间复杂度虽然能达到 O(n), 但是空间复杂度是O(N) ，题目已经指出N是一个较大的整数，所以可能不大好。<br />想了一下，想了一个空间复杂度是O(m)的算法 ，其中m是输入整数数列的长度。设输入的整数数组是array，符合条件的数对的个数为count，初始化为0<br />1. 建立hash集合S, 遍历array的前一半元素，对于这一半元素中的任意一个元素e, 在S中插入 N+1 - e <br />2. 遍历array的后一半元素，对于每一个元素e, 如果e在S中已经存在，则count +1<br />3. 遍历结束，返回count即可<br /><br />这个算法只需遍历一遍输入数组，复杂度为O(n) ，只需存储m/2个元素，复杂度为O(m) ,如果m远小于N，这个算法还是有很大改进的。<br /><img src ="http://www.blogjava.net/jefflee/aggbug/350637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jefflee/" target="_blank">Jeff Lee</a> 2011-05-19 18:48 <a href="http://www.blogjava.net/jefflee/archive/2011/05/19/350637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求两个各链表的第一个公共节点</title><link>http://www.blogjava.net/jefflee/archive/2011/01/31/343802.html</link><dc:creator>Jeff Lee</dc:creator><author>Jeff Lee</author><pubDate>Mon, 31 Jan 2011 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/jefflee/archive/2011/01/31/343802.html</guid><wfw:comment>http://www.blogjava.net/jefflee/comments/343802.html</wfw:comment><comments>http://www.blogjava.net/jefflee/archive/2011/01/31/343802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jefflee/comments/commentRss/343802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jefflee/services/trackbacks/343802.html</trackback:ping><description><![CDATA[解法见何海涛的博客：<a href="http://zhedahht.blog.163.com/blog/static/254111742008053169567/">http://zhedahht.blog.163.com/blog/static/254111742008053169567/</a><br /><br />我想到的是逆转链表再遍历的方法，理论上也是O(n)，但是需要来回逆转两次。。<br />这个题的解法也揭示了链表隐含的一个属性：长度。<br />如果有环又该怎么办？<br /><img src ="http://www.blogjava.net/jefflee/aggbug/343802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jefflee/" target="_blank">Jeff Lee</a> 2011-01-31 11:16 <a href="http://www.blogjava.net/jefflee/archive/2011/01/31/343802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法导论 第三版 电子版</title><link>http://www.blogjava.net/jefflee/archive/2010/12/03/339654.html</link><dc:creator>Jeff Lee</dc:creator><author>Jeff Lee</author><pubDate>Thu, 02 Dec 2010 16:05:00 GMT</pubDate><guid>http://www.blogjava.net/jefflee/archive/2010/12/03/339654.html</guid><wfw:comment>http://www.blogjava.net/jefflee/comments/339654.html</wfw:comment><comments>http://www.blogjava.net/jefflee/archive/2010/12/03/339654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jefflee/comments/commentRss/339654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jefflee/services/trackbacks/339654.html</trackback:ping><description><![CDATA[下载请点<a href="http://linux.chinaunix.net/bbs/attachment.php?aid=MjQ0NzY1fGNhY2JkZWQyfDEyOTEzMDU2OTl8YzY0ZUd2YklTUGxvcGs5WVBaZCtMSHF6NWNIQjl4SUwreTgwRlpHdTM2OXVKTWM%3D">我</a><br />虽然会去看的机会很少，毕竟手边还有第二版的英文版。。但是还是收藏一下。。<br />ps:  ms 用 adobe reader无法打开。。用 foxit 却可以正常打开。。<br /><br /><br /><img src ="http://www.blogjava.net/jefflee/aggbug/339654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jefflee/" target="_blank">Jeff Lee</a> 2010-12-03 00:05 <a href="http://www.blogjava.net/jefflee/archive/2010/12/03/339654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>