﻿<?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++博客-程序描绘人生-随笔分类-C++</title><link>http://www.cppblog.com/humanchao/category/20886.html</link><description>知识改变命运，学习成就未来。</description><language>zh-cn</language><lastBuildDate>Tue, 26 Jun 2018 23:03:50 GMT</lastBuildDate><pubDate>Tue, 26 Jun 2018 23:03:50 GMT</pubDate><ttl>60</ttl><item><title>LeetCode – Median of Two Sorted Arrays - findMedianSortedArrays</title><link>http://www.cppblog.com/humanchao/archive/2018/06/26/215747.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Tue, 26 Jun 2018 05:57:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2018/06/26/215747.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/215747.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2018/06/26/215747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/215747.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/215747.html</trackback:ping><description><![CDATA[<span>There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).<br /></span><br /><div>The following code is better than most of the results returned by baidu or google. Time&nbsp;<span>complexity is O((m+n)/2), Space complexity is O(1).</span><br /><br /><div><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span>&nbsp;1</span>&nbsp;<span>double</span>&nbsp;findMedianSortedArrays(vector&lt;<span>int</span>&gt;&amp;&nbsp;nums1,&nbsp;vector&lt;<span>int</span>&gt;&amp;&nbsp;nums2)&nbsp;<br /><span>&nbsp;2</span>&nbsp;{<br /><span>&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int</span>&nbsp;nums1_i&nbsp;=&nbsp;0,&nbsp;nums2_i&nbsp;=&nbsp;0;&nbsp;<br /><span>&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>int</span>&nbsp;mid1&nbsp;=&nbsp;0,&nbsp;mid2&nbsp;=&nbsp;0,&nbsp;count&nbsp;=&nbsp;0;<br /><span>&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>while</span>&nbsp;(nums1_i&nbsp;&lt;&nbsp;nums1.size()&nbsp;&amp;&amp;&nbsp;nums2_i&nbsp;&lt;&nbsp;nums2.size())&nbsp;<br /><span>&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span>&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>if</span>&nbsp;(count++&nbsp;&gt;&nbsp;((nums1.size()&nbsp;+&nbsp;nums2.size())&nbsp;/&nbsp;2))&nbsp;&nbsp;&nbsp;&nbsp;<span>break</span>;<br /><span>&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid1&nbsp;=&nbsp;mid2;<br /><span>&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid2&nbsp;=&nbsp;(nums1[nums1_i]&nbsp;&lt;&nbsp;nums2[nums2_i]&nbsp;?&nbsp;nums1[nums1_i++]&nbsp;:&nbsp;nums2[nums2_i++]);<br /><span>10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /><span>11</span>&nbsp;<br /><span>12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>while</span>&nbsp;(nums1_i&nbsp;&lt;&nbsp;nums1.size())&nbsp;<br /><span>13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br /><span>14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>if</span>&nbsp;(count++&nbsp;&gt;&nbsp;((nums1.size()&nbsp;+&nbsp;nums2.size())&nbsp;/&nbsp;2))&nbsp;&nbsp;&nbsp;&nbsp;<span>break</span>;<br /><span>15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid1&nbsp;=&nbsp;mid2;<br /><span>16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid2&nbsp;=&nbsp;nums1[nums1_i++];<br /><span>17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /><span>18</span>&nbsp;<br /><span>19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>while</span>&nbsp;(nums2_i&nbsp;&lt;&nbsp;nums2.size())&nbsp;<br /><span>20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br /><span>21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>if</span>&nbsp;(count++&nbsp;&gt;&nbsp;((nums1.size()&nbsp;+&nbsp;nums2.size())&nbsp;/&nbsp;2))&nbsp;&nbsp;&nbsp;&nbsp;<span>break</span>;<br /><span>22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid1&nbsp;=&nbsp;mid2;<br /><span>23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid2&nbsp;=&nbsp;nums2[nums2_i++];<br /><span>24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br /><span>25</span>&nbsp;<br /><span>26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>return</span>&nbsp;(nums1.size()&nbsp;+&nbsp;nums2.size())&nbsp;%&nbsp;2&nbsp;==&nbsp;0&nbsp;<br /><span>27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;(mid1&nbsp;+&nbsp;mid2)&nbsp;/&nbsp;2.0<br /><span>28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;mid2;&nbsp;<br /><span>29</span>&nbsp;}</div></div><img src ="http://www.cppblog.com/humanchao/aggbug/215747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2018-06-26 13:57 <a href="http://www.cppblog.com/humanchao/archive/2018/06/26/215747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>solution to the complier error "cannot open file 'libboost_thread-vcxx-mt-sgd-xx.lib'"</title><link>http://www.cppblog.com/humanchao/archive/2013/08/20/202671.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Tue, 20 Aug 2013 07:52:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2013/08/20/202671.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/202671.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2013/08/20/202671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/202671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/202671.html</trackback:ping><description><![CDATA[You need compile boost and add libs path in project or makefile.<br /><br />Compile boost run:<br /><br /><div><strong>bjam stage --toolset=msvc-10.0 link=static runtime-link=static threading=multi debug release</strong></div><img src ="http://www.cppblog.com/humanchao/aggbug/202671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2013-08-20 15:52 <a href="http://www.cppblog.com/humanchao/archive/2013/08/20/202671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gdb 查看死锁 </title><link>http://www.cppblog.com/humanchao/archive/2013/08/20/202670.html</link><dc:creator>胡满超</dc:creator><author>胡满超</author><pubDate>Tue, 20 Aug 2013 07:40:00 GMT</pubDate><guid>http://www.cppblog.com/humanchao/archive/2013/08/20/202670.html</guid><wfw:comment>http://www.cppblog.com/humanchao/comments/202670.html</wfw:comment><comments>http://www.cppblog.com/humanchao/archive/2013/08/20/202670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/humanchao/comments/commentRss/202670.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/humanchao/services/trackbacks/202670.html</trackback:ping><description><![CDATA[<span style="color: #666666; font-family: 宋体, Arial; font-size: 14pt; line-height: 26px; background-color: #ffffff;">转自：</span>http://blog.chinaunix.net/uid-23766031-id-2386460.html<span style="color: #666666; font-family: 宋体, Arial; font-size: 14pt; line-height: 26px; background-color: #ffffff;"><br /></span><span style="color: #666666; font-family: 宋体, Arial; font-size: 14pt; line-height: 26px; background-color: #ffffff;"><br />死锁：一种情形，此时执行程序中两个或多个线程发生永久堵塞（等待），每个线程都在等待被 &nbsp;</span><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;">其他线程占用并堵塞了的资源。例如，如果线程A锁住了记录1并等待记录2，而线程B锁住了记录2并等待记录1，这样两个线程就发生了死锁现象。</span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;">gdb调试死锁的方法：</span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;">gdb&nbsp;</span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;">attach pid</span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;"><strong>thread apply all bt</strong></span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;">找到_lll_lock_wait 锁等待的地方。</span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;">然后查找该锁被哪个线程锁住了。</span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt;">例如：</span></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"></div><div style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><div style="word-wrap: break-word;"><span style="font-size: 14pt;">查看哪个线程拥有互斥体（<strong>然后list代码，查看使用互斥变量的名称</strong>）<br /><br /></span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">(gdb) print AccountA_mutex</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">$1 = {__m_reserved = 2, __m_count = 0, __m_owner = 0x2527,</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">__m_kind = 0, __m_lock</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">= {__status = 1, __spinlock = 0}}</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">(gdb) print 0x2527</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">$2 = 9511</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">(gdb) print AccountB_mutex</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">$3 = {__m_reserved = 2, __m_count = 0, __m_owner = 0x2529,</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">__m_kind = 0, __m_lock = {__status = 1, __spinlock = 0}}</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">(gdb) print 0x2529</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">$4 = 9513</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">(gdb)</span></div><div style="word-wrap: break-word;"><span style="font-size: 14pt;">从上面的命令中，我们可以看出AccontA_mutex是被线程 5（LWP 9511）加锁（拥有）的，而AccontB_mutex是被线程 3（LWP 9513）加锁（拥有）的。</span></div></div><img src ="http://www.cppblog.com/humanchao/aggbug/202670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/humanchao/" target="_blank">胡满超</a> 2013-08-20 15:40 <a href="http://www.cppblog.com/humanchao/archive/2013/08/20/202670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>