﻿<?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>C++博客-coding everyday</title><link>http://www.cppblog.com/everyday/</link><description>编程面试题
https://interview.codeplex.com</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 18:29:04 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 18:29:04 GMT</pubDate><ttl>60</ttl><item><title>统计数组中未出现和多次出现的值</title><link>http://www.cppblog.com/everyday/archive/2013/08/29/202841.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Thu, 29 Aug 2013 02:24:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/08/29/202841.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/202841.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/08/29/202841.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/202841.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/202841.html</trackback:ping><description><![CDATA[<p><a href="http://huati.weibo.com/k/%E9%9D%A2%E8%AF%95%E9%A2%98?from=501">#<span style="font-family:SimSun;">面试题</span>#</a><span style="font-family:SimSun;">给定数组</span>A<span style="font-family:SimSun;">，大小为</span>n<span style="font-family:SimSun;">，数组元素为</span>1<span style="font-family:SimSun;">到</span>n<span style="font-family:SimSun;">的数字，不过有的数字出现了多次，有的数字没有出现。请给出算法和程序，统计哪些数字没有出现，哪些数字出现了多少次。能够在</span>O(n)<span style="font-family:SimSun;">的时间复杂度，</span>O(1)<span style="font-family:SimSun;">的空间复杂度要求下完成么</span><span style="font-family:SimSun;">？</span></p>
<p><span style="font-family:SimSun;"><br />
</span></p>
<p><span style="font-family:SimSun;">想了好久，都没能想出来算法，我觉得是不是自己走进死胡同了，决定再看一遍题目，这一遍果然让我发现，原来自己真的理解错了题目的意思，我一开始以为要输出多次出现的数字对应的数字，所以一直都绕不过来弯。</span></p>
<p><span style="font-family:SimSun;">所以有时候面试过程中，重新确认题目还是有必要的，有时候面试紧张会误解题目意思，当自己没有思路的时候，可以尝试确认题意，以来可以缓解一下自己的心情，再者可能面试官会跟你有更多的互动，增加好感。</span></p>
<p><span style="font-family:SimSun;"><br />
</span></p>
<p><span style="font-family:SimSun;">确定了题意，基于之前的思考，我的算法是这样的遍历一遍数组，用</span><span style="font-family:SimSun;">-2,-1,0来表示没有出现，出现一次，出现多次，如果当前节点大于0，目标节点为它对应的值，当前置为-2，若小于0，加一但不要超过0。算法需要一个递归函数（用来递归处理目标节点一直大于0的情况，即未处理过的）和一个遍历的函数。最终0即为多次出现，-1出现1次的，-2没有出现。因为有2个前提这个算法才有效：1～n；只要出现多次和没出现的数字，不需要次数。</span></p>
<p>&nbsp;</p>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">array</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">template</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;N</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;array_stat&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;array_stat(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;array</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;N</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;arr)&nbsp;:&nbsp;m_arr(arr)&nbsp;{<br />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">()()&nbsp;{<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">N;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process(i);<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">N;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(m_arr[i]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;exists&nbsp;more&nbsp;than&nbsp;once</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(m_arr[i]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;doesnt&nbsp;exist</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;endl;<br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">:<br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;array</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;N</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;m_arr;<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;process(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i)&nbsp;{<br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(m_arr[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cur&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;m_arr[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />
</span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_arr[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process(cur);<br />
</span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />
</span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_arr[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(m_arr[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
</span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_arr[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">};<br />
</span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()&nbsp;{<br />
</span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;array</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;arr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">4</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">6</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">6</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">6</span><span style="color: #000000; ">};<br />
</span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;array_stat</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;stat(arr);<br />
</span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;stat();<br />
</span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">}<br />
</span></div>
<br /><a href="https://interview.codeplex.com/SourceControl/latest#array_stat.cpp">源代码</a><img src ="http://www.cppblog.com/everyday/aggbug/202841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-08-29 10:24 <a href="http://www.cppblog.com/everyday/archive/2013/08/29/202841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可怜的小老鼠</title><link>http://www.cppblog.com/everyday/archive/2013/08/02/202307.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Fri, 02 Aug 2013 09:26:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/08/02/202307.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/202307.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/08/02/202307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/202307.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/202307.html</trackback:ping><description><![CDATA[<div><em><a href="http://huati.weibo.com/k/%E9%9D%A2%E8%AF%95%E6%80%9D%E8%80%83%E9%A2%98?from=501">#面试思考题#</a>可怜的小老鼠：有11瓶酒，只有一瓶有毒。喝酒之后，三天会死，只有三天时间。请问至少需要多少只老鼠，可以找出9瓶没有毒的酒。关注微信公众账号&#8220;待字闺中&#8221;，了解和讨论参考分析。<br /><br /><div>http://www.weibo.com/1915548291/A2QpWmhUH</div></em></div><br />分析：<br /><div>直觉上应该是4只鼠可以找出那瓶有毒的。如果要找出9瓶没有毒的，肯定不大于4嘛。这个大家能想明白吗？有人想看分析就回复哦。:P<br /><br /><div>最多需要3只就够了，9宫格。ABC 和 ABC，每只鼠负责一横一竖，这样每一瓶都至少有2只喝过，除了对角线上，如果是对角线上只会死一只，其余都是2只，那2只就能定位到哪一瓶了。额。。不知道还有没有更少的，只需要2只或者1只就搞定的？</div><br /><div>  <table border="0" cellpadding="0" cellspacing="0" width="134"><colgroup><col style="width:22pt" width="29">  <col style="width:22pt" width="30">  <col style="width:28pt" width="37">  <col style="width:29pt" width="38">  </colgroup><tbody><tr style="height:14.4pt" height="19">   <td style="height:14.4pt;width:22pt" height="19" width="29">&nbsp;</td>   <td style="border-left:none;width:22pt" width="30">A</td>   <td style="border-left:none;width:28pt" width="37">B</td>   <td style="border-left:none;width:29pt" width="38">C</td>  </tr>  <tr style="height:14.4pt" height="19">   <td style="height:14.4pt;border-top:none" height="19">A</td>   <td style="border-top:none;border-left:none">1</td>   <td style="border-top:none;border-left:none">2</td>   <td style="border-top:none;border-left:none">3</td>  </tr>  <tr style="height:14.4pt" height="19">   <td style="height:14.4pt;border-top:none" height="19">B</td>   <td style="border-top:none;border-left:none">4</td>   <td style="border-top:none;border-left:none">5</td>   <td style="border-top:none;border-left:none">6</td>  </tr>  <tr style="height:14.4pt" height="19">   <td style="height:14.4pt;border-top:none" height="19">C</td>   <td style="border-top:none;border-left:none">7</td>   <td style="border-top:none;border-left:none">8</td>   <td style="border-top:none;border-left:none">9</td>  </tr> </tbody></table></div><br />A需要喝的是1，2，3，4，7<br />B需要喝的是2，4，5，6，8<br />C需要喝的是3，6，7，8，9<br /><br />现在可以通过死掉老鼠的情况推断出哪一瓶有问题了，对吧。<br /><br />更新：<br />多谢<a title="geagle9" href="http://www.weibo.com/1470001140">@geagle9。</a>的提醒，确实存在问题，2和4都是A和B死。呜呜！！之前的算法错误喽。。<br /><br />看起来我的9宫格是走不通了，不知道老罗是不是还走的下去。<br /><br />其实我一直有个不明白的是，一共11个瓶子，为啥只要找出9个没有毒的就可以了。答案是要2个一组，分6组，这样的话，用3个老鼠能定位到每一组，这个时候肯定是有一组有问题的，但不管是哪一组，至少能有9瓶是好的。哎呀妈呀。终于弄出来了。<br />1,2 -&gt; A<br />3,4 -&gt; B<br />5,6 -&gt; C<br />7,8 -&gt; A+B<br />9,10 -&gt; A+C<br />11 -&gt;B+C</div><img src ="http://www.cppblog.com/everyday/aggbug/202307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-08-02 17:26 <a href="http://www.cppblog.com/everyday/archive/2013/08/02/202307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第n杯水</title><link>http://www.cppblog.com/everyday/archive/2013/08/01/202274.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Thu, 01 Aug 2013 05:43:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/08/01/202274.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/202274.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/08/01/202274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/202274.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/202274.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一座金字塔，从上到下，第一层有一个杯子、第二层有两个杯子，依次类推。每个杯子的容量为C升，从塔顶倒下L升水，当1号杯子满了之后，会等量溢出到2号和3号杯子。当2号和3号满了，2号溢出到4号和5号，3号溢出到5号和6号，注意5号接受来自两个杯子的水。依次类推。给定C和L，请问，第n杯里有多少水。 &nbsp;&nbsp;<a href='http://www.cppblog.com/everyday/archive/2013/08/01/202274.html'>阅读全文</a><img src ="http://www.cppblog.com/everyday/aggbug/202274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-08-01 13:43 <a href="http://www.cppblog.com/everyday/archive/2013/08/01/202274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题：熟悉的陌生人</title><link>http://www.cppblog.com/everyday/archive/2013/07/19/201944.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Fri, 19 Jul 2013 01:52:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/07/19/201944.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/201944.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/07/19/201944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/201944.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/201944.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: #面试题#Facebook用户都是双向的好友，a是b的好友，那么b一定是a的。给定一个用户列表，有些用户是好友，有些不是，请判断，这些用户是否可以划分为两组，每组内的用户，互相都不是好友。如果能，请给出这个划分。比如用户：{1, 2, 3} 好友关系：1-2， 2-3 划分：{1,3} {2}。<br><br>题目乍一看，感觉像是图连通的问题。细细品了下，貌似不是滴。&nbsp;&nbsp;<a href='http://www.cppblog.com/everyday/archive/2013/07/19/201944.html'>阅读全文</a><img src ="http://www.cppblog.com/everyday/aggbug/201944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-07-19 09:52 <a href="http://www.cppblog.com/everyday/archive/2013/07/19/201944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法题：一个不能少</title><link>http://www.cppblog.com/everyday/archive/2013/07/18/201921.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Thu, 18 Jul 2013 02:14:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/07/18/201921.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/201921.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/07/18/201921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/201921.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/201921.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: #面试编程题#一 个不能少：有k个有序的数组，请找到一个最小的数字范围。使得这k个有序数组中，每个数组都至少有一个数字在该范围中。例如：1:{ 4, 10, 15, 24, 26 }；2: { 0, 9, 12, 20 }；3: { 5, 18, 22, 30 }。所得最小范围为[20,24]，其中，20在2中，22在3中，24在1中。&nbsp;&nbsp;<a href='http://www.cppblog.com/everyday/archive/2013/07/18/201921.html'>阅读全文</a><img src ="http://www.cppblog.com/everyday/aggbug/201921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-07-18 10:14 <a href="http://www.cppblog.com/everyday/archive/2013/07/18/201921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>杂谈 - 面试问算法题</title><link>http://www.cppblog.com/everyday/archive/2013/07/17/201884.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Wed, 17 Jul 2013 01:13:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/07/17/201884.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/201884.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/07/17/201884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/201884.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/201884.html</trackback:ping><description><![CDATA[<div>  <p style="margin:0in;font-family:SimSun;font-size:11.0pt">前些天，看到很多大牛就&#8220;面试该不该问算法题&#8221;进行了大量的讨论和厮杀，作为小程序员也就看看的份。昨天在微博上看到有个网友对一个面试题做的评论，&#8220;如果一个人看过类似解法，能回答出来，一个人没看过回答不出来，就能说明回答不出来的能力就不如回答出来的吗？&#8221;对此我表示赞同，确实不能说明回答不出的能力不如看过而回答出来的人。</p>  <p style="margin:0in;font-family:SimSun;font-size:11.0pt">&nbsp;</p>  <p style="margin:0in;font-family:SimSun;font-size:11.0pt">但是如果我是面试官，我肯定会对回答出来的人更有好感。为什么？我没有理由不对回答出我问题的人欣赏，而对没有回答出来的人更欣赏嘛，我想这是人之常情吧。我刚才说我赞同，确实不能证明回答出来的人更有能力，假如他是看过的，但是我想至少能说明或许他更勤奋，为了面试做了准备，平时有这方面的兴趣等，难道不是吗？</p>  <p style="margin:0in;font-family:SimSun;font-size:11.0pt">&nbsp;</p>  <p style="margin:0in;font-family:SimSun;font-size:11.0pt">退一步讲，作为面试官为什么要去证明回答不出的人更有实力呢？这不是应该应聘者的事吗？应聘者才需要证明自己更有能力胜任这个工作吧？</p>  <p style="margin:0in;font-family:SimSun;font-size:11.0pt">&nbsp;</p>  <p style="margin:0in;font-size:11.0pt"><span style="font-family:SimSun">通常应聘者被问到一些自己回答不了的问题之后，会很紧张（更紧张），以至于影响发挥，完全体现不出自己的实力。其实我倒觉得可以正视自己回答不了的问题，这些只不过是所有面试问题中的一小部分，不如坦白的承认这方面自己相对较弱，然后引导面试官问一些自己比较擅长的问题，能体现自己的能力（分析问题解决问题，学习能力，编码能力</span><span style="font-family:Calibri">&#8230;</span><span style="font-family:SimSun">）的方向。当面试官问你一些你不熟悉的问题，坦白说不会，&#8220;这个方面我不太熟，但是相关的，</span><span style="font-family:Calibri">&#8230;</span><span style="font-family:SimSun">方面，我平时比较关注，也花了不少时间，有些</span><span style="font-family:Calibri">&#8230;</span><span style="font-family:SimSun">&#8221;（前提是，说实话）这个时候如果面试官也了解这方面，可以深入的问你这方面的问题；即便面试官不了解这方面，也会对你有好感，改善对你的看法。</span></p>  </div><img src ="http://www.cppblog.com/everyday/aggbug/201884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-07-17 09:13 <a href="http://www.cppblog.com/everyday/archive/2013/07/17/201884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>括号匹配问题</title><link>http://www.cppblog.com/everyday/archive/2013/07/13/201771.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Sat, 13 Jul 2013 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/07/13/201771.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/201771.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/07/13/201771.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/201771.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/201771.html</trackback:ping><description><![CDATA[这个问题很简单，大学学数据结构的时候，讲堆栈一章的时候作为其中一个例子来说的。但是如果面试中被问到这个题，我想用堆栈来做应该不能被接受吧，理由是空间和时间的代价都挺高的。<br /><br />有没有稍微好点的算法呢？介绍个时间O(n), 空间O(1)的算法。<br /><br />既然我们只是要找出括号有没有匹配就行了，那我们用一种方式记下左括号和右括号的次数不就可以了，例如left_count, right_count。它们的差为0不就好了？只要不为0，肯定就不匹配了，对吧？更进一步，为啥非要用2个变量呢，一个就够了嘛。遇到左括号++，遇到右括号--，最后为0即匹配。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;is_brackets_match(<span style="color: #0000FF; ">char</span>&nbsp;*<span style="color: #0000FF; ">const</span>&nbsp;input)&nbsp;{<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(input&nbsp;!=&nbsp;nullptr)&nbsp;{<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*p&nbsp;=&nbsp;input;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;count&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(*p&nbsp;!=&nbsp;'\0')&nbsp;{<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*p&nbsp;==&nbsp;'(')<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++count;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(*p&nbsp;==&nbsp;')')<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--count;<br /><span style="color: #008080; ">11</span>&nbsp;<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p++;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">14</span>&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(count&nbsp;==&nbsp;0)<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">19</span>&nbsp;}</div><img src ="http://www.cppblog.com/everyday/aggbug/201771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-07-13 17:20 <a href="http://www.cppblog.com/everyday/archive/2013/07/13/201771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Magic Index</title><link>http://www.cppblog.com/everyday/archive/2013/07/12/201732.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Fri, 12 Jul 2013 06:25:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/07/12/201732.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/201732.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/07/12/201732.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/201732.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/201732.html</trackback:ping><description><![CDATA[<div><a href="http://huati.weibo.com/k/%E9%9D%A2%E8%AF%95%E7%BC%96%E7%A8%8B%E9%A2%98?from=501">#面试编程题#</a>给定一个数组A，其中有一个位置被称为Magic Index，含义是：如果i是Magic Index，则A[i] = i。假设A中的元素递增有序、且不重复，请给出方法，找到这个Magic Index。当A中允许有重复的元素，该怎么办呢？</div><br />第一个，不重复，很简单，用二分查找就OK了。对吧<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find_magic_index2(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">list,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;high&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(high&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;low)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;idx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(high&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;low)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(idx&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;list[idx])<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;idx;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(list[idx]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;idx)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;high&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;idx&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;idx&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">}</span></div><br />第二个，可重复的，该怎么办?从头到尾走一边，总归是可以的嘛。:)。我的想法是，如果a[i]等于i的话，找到了；如果大于i的话，让i=a[i]，不然i++继续找。这样最差的情况才是O(n)<br />至于为什么可以让i=a[i]，原因由于数列是递增的，所以数组元素在{i, a[i]}的区间中，肯定不可能存在magic index。这样看上去是不是跳跃着前进啊。:)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find_magic_index&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">list,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;count)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">count)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(list[i]&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;i)<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;i;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(list[i]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;i)<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;list[i];<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000;">}</span></div><img src ="http://www.cppblog.com/everyday/aggbug/201732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-07-12 14:25 <a href="http://www.cppblog.com/everyday/archive/2013/07/12/201732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单链表的快速排序</title><link>http://www.cppblog.com/everyday/archive/2013/07/12/201727.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Fri, 12 Jul 2013 05:41:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/07/12/201727.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/201727.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/07/12/201727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/201727.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/201727.html</trackback:ping><description><![CDATA[单链表的快速排序<br />单链表的快速排序跟数组的排序原理上一致，有一个分区（区分）的函数在一个区间中针对某个标杆值进行区分，比它大的放它后面，比它小的放它前面，并返回它的地址，好对它前面的以及它后面的递归。<br /><br />单链表的快速排序跟数组有个明显的区别，就是指示起始和终止的元素，在一轮之后它们在链表中的位子会发生改变，所以需要返回一个新的起始的位置（终止的位置）<br />我的算法中总是拿后一个的节点作为终止位置，所以它在链表中的位子其实是不改变的，所以我只修改了起始位置指向新的起始位置即可。<br /><br />我的算法是，用2个链表，一个放比它大的一个放比它小的，最后接起来，它的位置就是mid，而其实位置就是当初起始的前一个节点在新链表中的next。有点拗口，就是说a-&gt;start-&gt;...-&gt;nullptr，这一轮传进来的是start，那么经过这轮的分区之后，start的位置肯定改变了，对吧？但是a-&gt;next的地址没有改变，即&amp;(a-&gt;next)，因为start之前的都会原封不动的放在那里。我觉得用指针的地址来处理是这里的关键之处吧。<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/everyday/QuickSort.png" alt="" height="469" border="0" width="812" /><br />这是一轮partition之前和之后的图示，之后就对于(begin, mid)和（mid-&gt;next, end)进行快速排序即可。<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Problem:&nbsp;sort&nbsp;a&nbsp;singly&nbsp;link&nbsp;list&nbsp;by&nbsp;Quick&nbsp;Sort</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">node&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">partition(list&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">l,&nbsp;node&nbsp;</span><span style="color: #000000; ">*&amp;</span><span style="color: #000000; ">begin,&nbsp;node&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;nullptr)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;if&nbsp;end&nbsp;is&nbsp;the&nbsp;next&nbsp;node,&nbsp;that&nbsp;means&nbsp;it's&nbsp;only&nbsp;one&nbsp;node&nbsp;to&nbsp;sort</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(begin&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;nullptr&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;end&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;begin</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;nullptr;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;small_list,&nbsp;big_list;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;l.root;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pivot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;begin;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">pbegin;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;points&nbsp;to&nbsp;the&nbsp;address&nbsp;of&nbsp;begin</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">s_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">small_list.root,&nbsp;</span><span style="color: #000000; ">**</span><span style="color: #000000; ">b_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">big_list.root;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;move&nbsp;previous&nbsp;nodes&nbsp;before&nbsp;'begin'&nbsp;to&nbsp;small&nbsp;list</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(current&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;begin)&nbsp;{<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;current;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s_current)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next;<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;current</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;pbegin&nbsp;presents&nbsp;the&nbsp;location(address)&nbsp;of&nbsp;begin&nbsp;item,&nbsp;e.g.&nbsp;if&nbsp;(a-&gt;next&nbsp;==&nbsp;begin)&nbsp;then&nbsp;pbegin&nbsp;=&nbsp;&amp;a-&gt;next;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;pbegin&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;s_current;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(begin&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;end)&nbsp;{<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(begin</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">data&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;pivot</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">data)&nbsp;{<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;begin;<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s_current)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next;<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;begin;<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b_current)</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next;<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;begin</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next;<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;pass&nbsp;begin&nbsp;back&nbsp;to&nbsp;quick_sort&nbsp;for&nbsp;next&nbsp;sort&nbsp;action</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pbegin;<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">b_current</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;end;<br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">s_current&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;big_list.root;<br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;small_list;<br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;l.print();<br /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;current&nbsp;pivot&nbsp;would&nbsp;be&nbsp;the&nbsp;end&nbsp;node&nbsp;for&nbsp;smaller&nbsp;set&nbsp;sorting</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;big_list.root;<br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;quick_sort(list&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">l,&nbsp;node&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">begin,&nbsp;node&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">end&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;nullptr)&nbsp;{<br /></span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(begin&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;end)&nbsp;{<br /></span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;mid&nbsp;represents&nbsp;the&nbsp;pivot&nbsp;node&nbsp;which&nbsp;is&nbsp;the&nbsp;next&nbsp;node&nbsp;of&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;small&nbsp;list</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">54</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">mid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;partition(l,&nbsp;begin,&nbsp;end);<br /></span><span style="color: #008080; ">55</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">56</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(mid&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;nullptr){<br /></span><span style="color: #008080; ">57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quick_sort(l,&nbsp;begin,&nbsp;mid);<br /></span><span style="color: #008080; ">58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">59</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(mid&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;nullptr&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;nullptr)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quick_sort(l,&nbsp;mid</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">next,&nbsp;end);<br /></span><span style="color: #008080; ">63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">64</span>&nbsp;<span style="color: #000000; ">}</span></div><br /><a href="https://interview.codeplex.com/SourceControl/latest#quick_sort_list.cpp">代码</a> <img src ="http://www.cppblog.com/everyday/aggbug/201727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-07-12 13:41 <a href="http://www.cppblog.com/everyday/archive/2013/07/12/201727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>蓄水池抽样</title><link>http://www.cppblog.com/everyday/archive/2013/07/03/201484.html</link><dc:creator>everyday</dc:creator><author>everyday</author><pubDate>Wed, 03 Jul 2013 01:29:00 GMT</pubDate><guid>http://www.cppblog.com/everyday/archive/2013/07/03/201484.html</guid><wfw:comment>http://www.cppblog.com/everyday/comments/201484.html</wfw:comment><comments>http://www.cppblog.com/everyday/archive/2013/07/03/201484.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/everyday/comments/commentRss/201484.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/everyday/services/trackbacks/201484.html</trackback:ping><description><![CDATA[yeah. 首先要恭喜下自己，昨天的<a href="http://www.cppblog.com/everyday/archive/2013/07/02/201473.html">算法</a>蒙对了，请看<a href="http://www.weibo.com/lirenchen">@陈利人</a> 的<a href="http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5ODIzNDQ3Mw==&amp;appmsgid=10000029&amp;itemidx=1&amp;sign=710efaef26476a48b2e4876cf7ef2883">帖子</a>。 【鼓掌】【鼓掌】:)<br /><div><h1>经典面试题：蓄水池抽样</h1></div><div><p>要求从N个元素中随机的抽取k个元素，其中N无法确定。</p><p>这种应用的场景一般是数据流的情况下，由于数据只能被读取一次，而且数据量很大，并不能全部保存，因此数据量N是无法在抽样开始时确定的；但又要保持随机性，于是有了这个问题。所以搜索网站有时候会问这样的问题。</p><p>这里的核心问题就是&#8220;随机&#8221;，怎么才能是随机的抽取元素呢？我们设想，买彩票的时候，由于所有彩票的中奖概率都是一样的，所以我们才是&#8220;随机的&#8221;买彩票。那么要使抽取数据也随机，必须使每一个数据被抽样出来的概率都一样。</p><p><br /></p><p>哎呀妈呀，这题目一天比一天难啊。目测搞不定啊。</p><p>在班车上简单分析了下，N的值要到最后才知道，从N个里面抽k个元素，要是概率知识没有都还给老师的话，每个元素被抽中的概率是C<sub>N</sub><sup>k</sup>，对不？唔，既然在N知道之前，就要一样概率的抽取k个元素，那我能不能猜想最后的算法其实是跟N无关的呢？不管怎么样先挖个坑再说，目测这个坑不一定能填上。:D<br /></p></div><img src ="http://www.cppblog.com/everyday/aggbug/201484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/everyday/" target="_blank">everyday</a> 2013-07-03 09:29 <a href="http://www.cppblog.com/everyday/archive/2013/07/03/201484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>