<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/feed.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Jimdeng&apos;s Blog</title><description>Code is cheap, show me the prompt</description><link>https://jimdeng.com</link><item><title>剑指offer(Go版本)-数组</title><link>https://jimdeng.com/post/jianzhi-offer</link><guid isPermaLink="false">jianzhi-offer</guid><description>剑指offer Go 版本</description><pubDate>Sat, 07 Sep 2024 07:43:34 GMT</pubDate><content:encoded>&lt;h1&gt;剑指 offer(Go 版本)-数组&lt;a href=&quot;#剑指-offergo-版本-数组&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h3&gt;1.和为 S 的两个数字&lt;a href=&quot;#1和为-s-的两个数字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入一个递增排序的数组和一个数字 S，在数组中查找两个数，使得他们的和正好是 S，如果有多对数字的和等于 S，输出两个数的乘积最小的。&lt;/p&gt;
&lt;p&gt;对应每个测试案例，输出两个数，小的先输出。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：双指针，i := 0 j := length - 1&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; findNumbersWithSum&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;sum&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  result &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(a)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  j &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; j {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; a[i]&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;a[j] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; sum {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(result, i, j)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      break&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; a[i]&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;a[j] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; sum {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; a[i]&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;a[j] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; sum {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      j&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2.和为 S 的连续正数序列&lt;a href=&quot;#2和为-s-的连续正数序列&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;小明很喜欢数学,有一天他在做数学作业时,要求计算出 9~16 的和,他马上就写出了正确答案是 100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为 100(至少包括两个数)。没多久,他就得到另一组连续正数和为 100 的序列&lt;/p&gt;&lt;div&gt;&lt;/div&gt;,19,20,21,22。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;现在把问题交给你,你能不能也很快的找出所有和为 S 的连续正数序列?&lt;/p&gt;
&lt;p&gt;输出描述:&lt;/p&gt;
&lt;p&gt;输出所有和为 S 的连续正数序列。序列内按照从小至大的顺序，序列间按照开始数字从小到大的顺序。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：双指针：cur := (low + high) * (high - low + 1) / 2 ,cur 关于 high 的正相关，关于 low 的负相关。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; findContinuousSequence&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sum&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) [][]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   result &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; [][]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   low &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   high &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   for&lt;/span&gt;&lt;span&gt; low &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; high {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      cur &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; (low &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; high) &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; (high &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; low &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if&lt;/span&gt;&lt;span&gt; cur &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; sum {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         temp &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; low; i &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; high; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            temp &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(temp, i)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(result, temp)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         low&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if&lt;/span&gt;&lt;span&gt; cur &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; sum {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         high&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if&lt;/span&gt;&lt;span&gt; cur &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; sum {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         low&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.连续子数组的最大和&lt;a href=&quot;#3连续子数组的最大和&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;HZ 偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了&lt;/p&gt;&lt;div&gt;&lt;/div&gt;,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢？例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为 8(从第 0 个开始,到第 3 个为止)。给一个数组，返回它的最大连续子序列的和，你会不会被他忽悠住？(子向量的长度至少是 1)&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：dp/优化后的 dp&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;// 使用dp table&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; maxSubArray&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    dp &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, length)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    dp[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nums[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ans &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; dp[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; length; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; dp[i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            dp[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dp[i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; nums[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            dp[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nums[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; ans &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; dp[i] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            ans &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; dp[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; ans&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;//dp优化，节省空间复杂度&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; maxSubArray&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;		length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    sum &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nums[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ans &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; dp[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; length; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; sum &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {         &lt;/span&gt;&lt;span&gt;// 此时sum对应dp[i-1]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            sum &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; nums[i]   &lt;/span&gt;&lt;span&gt;// 更新后sum表示dp[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            sum &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nums[i]    &lt;/span&gt;&lt;span&gt;// 更新后sum表示dp[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; ans &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; sum {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            ans &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; sum&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; ans&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4.数字在排序数组中出现的次数&lt;a href=&quot;#4数字在排序数组中出现的次数&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;统计一个数字在排序数组中出现的次数。&lt;/p&gt;
&lt;p&gt;看到排序数组，要想到用二分查找。&lt;/p&gt;
&lt;p&gt;先找到最前面的数字 k，再找到最后面的数字 k，通过下标求出次数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：单增数组二分查找&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getNumberOfK&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(num)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  firstK &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; getFirstK&lt;/span&gt;&lt;span&gt;(num, k, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  lastK &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; getLastK&lt;/span&gt;&lt;span&gt;(num, k, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if&lt;/span&gt;&lt;span&gt; firstK &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; lastK &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; lastK &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; firstK &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getFirstK&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if&lt;/span&gt;&lt;span&gt; start &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; end {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  mid &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; (start &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; end) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  if&lt;/span&gt;&lt;span&gt; num[mid] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; k {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; getFirstK&lt;/span&gt;&lt;span&gt;(num, k, start, mid&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; num[mid] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; k {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; getFirstK&lt;/span&gt;&lt;span&gt;(num, k, mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, end)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &amp;gt;=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; num[mid&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; k { &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; getFirstK&lt;/span&gt;&lt;span&gt;(num, k, start, mid&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getLastK&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;num&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;end&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(num)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  mid &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; (start &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; end) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  for&lt;/span&gt;&lt;span&gt; start &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; end {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; num[mid] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; k {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      end &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; num[mid] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; k {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      start &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &amp;lt;=&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; num[mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; k { &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      start &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mid &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (start &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; end) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5.数组中只出现一次的数字&lt;a href=&quot;#5数组中只出现一次的数字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。&lt;/p&gt;
&lt;p&gt;正常能想到哈希表来处理，但此题考查的是异或的知识，不同则为 1，相同则为 0，可以发现，0^任何数就等于数本身。&lt;/p&gt;
&lt;p&gt;简单来说从 0 开始时，异或一个数相当于加上这个数，再异或这个数时，相当于减掉这个数，最后剩下的就是唯一存在的数了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：位运算，相同两个数异或为 0，0 与任何数异或为本身&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; singleNumber&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    result &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, x &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        result &lt;/span&gt;&lt;span&gt;^=&lt;/span&gt;&lt;span&gt; x &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;6.旋转数组的最小数字!&lt;a href=&quot;#6旋转数组的最小数字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。&lt;/p&gt;
&lt;p&gt;输入一个非递减排序的数组的一个旋转，输出旋转数组的最小元素。&lt;/p&gt;
&lt;p&gt;例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转，该数组的最小值为 1。&lt;/p&gt;
&lt;p&gt;NOTE：给出的所有元素都大于 0，若数组大小为 0，请返回 0。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：二分查找&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; minNumberInRotateArray&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rotate&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(rotate)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   if&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   if&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; rotate[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if&lt;/span&gt;&lt;span&gt; rotate[i] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; rotate[i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         return&lt;/span&gt;&lt;span&gt; rotate[i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         if&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; rotate[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; minNumberInRotateArray&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;rotate&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(rotate)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   if&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   if&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; rotate[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   low &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   high &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   for&lt;/span&gt;&lt;span&gt; low &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; high {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      mid &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; (low &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; high) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if&lt;/span&gt;&lt;span&gt; rotate[mid] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; rotate[high] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         low &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; rotate[mid] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; rotate[high] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         high &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; rotate[mid] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; rotate[high] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         high&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   return&lt;/span&gt;&lt;span&gt; rotate[low]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;7.数组中的逆序对&lt;a href=&quot;#7数组中的逆序对&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在数组中的两个数字，如果前面一个数字大于后面的数字，则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数 P。并将 P 对 1000000007 取模的结果输出。即输出 P%1000000007。&lt;/p&gt;
&lt;p&gt;输入描述:&lt;/p&gt;
&lt;p&gt;题目保证输入的数组中没有的相同的数字。&lt;/p&gt;
&lt;p&gt;数据范围：&lt;/p&gt;
&lt;p&gt;对于%50 的数据,size&amp;lt;=10^4&lt;/p&gt;
&lt;p&gt;对于%75 的数据,size&amp;lt;=10^5&lt;/p&gt;
&lt;p&gt;对于%100 的数据,size&amp;lt;=2*10^5&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;示例：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;输入&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1,2,3,4,5,6,7,0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;输出&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;7&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;思路：归并排序。&lt;/li&gt;
&lt;li&gt;mergSort 归并排序，两个作用，一是将 nums 的[l,r]元素进行排序，二是计算在归并排序过程中的逆序对。&lt;/li&gt;
&lt;li&gt;归并排序中如何计算逆序对？归并排序过程：想要让整个数组有序，先让左半部分和右半部分数组有序，然后将这两个有序数组排序。而左半部分和右半部分分别看成一个数组递归的进行上面操作，直到数组只有一个元素。关键部分就是将两个有序数组排序。lptr，rPtr 是有序数组排序过程中的待排序的两个指针。当前 lPtr 指向的数字比 rPtr 小，但是比 RR 中 [0 … rPtr - 1] 的其他数字大，[0 … rPtr - 1] 的其他数字本应当排在 lPtr 对应数字的左边，但是它排在了右边，所以这里就贡献了 rPtr 个逆序对。&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; reversePairs&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; mergeSort&lt;/span&gt;&lt;span&gt;(nums, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; mergeSort&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;l&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; r {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mid &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (r&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;l)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    cnt &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; mergeSort&lt;/span&gt;&lt;span&gt;(nums, l, mid) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; mergeSort&lt;/span&gt;&lt;span&gt;(nums, mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, r)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    tmp &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    l1, r1 &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; l, mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; l1 &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; r1 &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; r {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; nums[l1] &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; nums[r1] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            cnt &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; r1 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; (mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            tmp &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(tmp, nums[l1])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            l1&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            tmp &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(tmp, nums[r1])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            r1&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; ; l1 &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; mid; l1&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        cnt &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; r&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt; (mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        tmp &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(tmp, nums[l1])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; ; r1 &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; r; r1&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        tmp &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(tmp, nums[r1])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; l; i &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; r; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        nums[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; tmp[i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;l]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; cnt&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;8.最小的 K 个数&lt;a href=&quot;#8最小的-k-个数&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入 n 个整数，找出其中最小的 K 个数。例如输入 4,5,1,6,2,7,3,8 这 8 个数字，则最小的 4 个数字是 1,2,3,4,。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：方法一：排序，然后取前 k 个数，O(nlogn)，O(1)。方法二：堆排序，O(nlogk),O(k)。方法三：快排分治思想，O(n),O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getLeastNumbers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   if&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(input) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; ||&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; nil&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   if&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(input) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; input&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   sort.&lt;/span&gt;&lt;span&gt;Ints&lt;/span&gt;&lt;span&gt;(input)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   return&lt;/span&gt;&lt;span&gt; input[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; : k&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// getLeastNumbers 用heap实现大根堆，然后用大根堆实现最小的k个数&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getLeastNumbers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	if&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; ||&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(arr) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;		return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	d &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;IntHeap&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	heap.&lt;/span&gt;&lt;span&gt;Init&lt;/span&gt;&lt;span&gt;(d)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	for&lt;/span&gt;&lt;span&gt; _, v &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; arr {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;		if&lt;/span&gt;&lt;span&gt; d.&lt;/span&gt;&lt;span&gt;Len&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; k {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;			heap.&lt;/span&gt;&lt;span&gt;Push&lt;/span&gt;&lt;span&gt;(d, v)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;		} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;			if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;d)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; v {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;				heap.&lt;/span&gt;&lt;span&gt;Pop&lt;/span&gt;&lt;span&gt;(d)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;				heap.&lt;/span&gt;&lt;span&gt;Push&lt;/span&gt;&lt;span&gt;(d, v)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;			}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	return&lt;/span&gt;&lt;span&gt; *&lt;/span&gt;&lt;span&gt;d&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// IntHeap 堆demo,利用heap实现大、小根堆，需要实现5个方法，Len,Less,Swap, Push,Pop。前三个是排序接口，后面两个是heap接口补充的&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; IntHeap&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;IntHeap&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;Len&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	return&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// Less 定义比较规则。大根堆，Less在大于时返回小于&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;IntHeap&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;Less&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	return&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h)[i] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h)[j]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;IntHeap&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;Swap&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h)[i], (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h)[j] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h)[j], (&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h)[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;IntHeap&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;Push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;x&lt;/span&gt;&lt;span&gt; interface&lt;/span&gt;&lt;span&gt;{}) {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	*&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;h, x.(&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;IntHeap&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;Pop&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt;{} {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	old &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; *&lt;/span&gt;&lt;span&gt;h&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	n &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(old)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	x &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; old[n&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	*&lt;/span&gt;&lt;span&gt;h &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; old[:n&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;	return&lt;/span&gt;&lt;span&gt; x&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getLeastNumbers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(arr) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; ||&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; quickSearch&lt;/span&gt;&lt;span&gt;(arr, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(arr)&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, k)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// quickSearch 对arr中[i,j]元素进行pivot=arr[i]的划分函数处理，并将函数返回下标t与k-1比较，如果相等即返回arr[:k]，若下标小于k-1，则对[t+1,j] quickSearch递归处理，若下标大于k-1，则对[i,t-1]quickSearch递归处理。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; quickSearch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;arr&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    t &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; partition&lt;/span&gt;&lt;span&gt;(arr, i, j)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; t &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; k&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; arr[:k]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; t &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; k&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; quickSearch&lt;/span&gt;&lt;span&gt;(arr, t&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, j, k)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; quickSearch&lt;/span&gt;&lt;span&gt;(arr, i, t&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, k)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// partition 划分函数，将nums的[i,j]位置元素进行划分，pivot为第一个元素nums[i]，结果是对nums原地修改，大于pivot的元素都在pivot右边，比pivot小的元素都在pivot左边。并返回pivot下标。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; partition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    l,m,r&lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt;i,i,j&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; l&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;r {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        for&lt;/span&gt;&lt;span&gt; l&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;r &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; nums[r]&lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt;nums[m] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            r&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        for&lt;/span&gt;&lt;span&gt; l&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;r &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; nums[l]&lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt;nums[m] {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            l&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; l&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;r {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            nums[l],nums[r]&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;nums[r],nums[l]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    nums[m],nums[l]&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;nums[l],nums[m]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; l&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;9.数组中出现次数超过一半的数字&lt;a href=&quot;#9数组中出现次数超过一半的数字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。&lt;/p&gt;
&lt;p&gt;你可以假设数组是非空的，并且给定的数组总是存在多数元素。&lt;/p&gt;
&lt;p&gt;示例 1:&lt;/p&gt;
&lt;p&gt;输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2&lt;/p&gt;
&lt;p&gt;限制：&lt;/p&gt;
&lt;p&gt;1 &amp;lt;= 数组长度 &amp;lt;= 50000&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;思路：方法一：哈希 O(n), O(n)；方法二：Boyer-Moore 投票算法，&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;投票算法：维护一个候选众数 candidate 和它出现的次数 count。初始时 candidate 可以为任意值，count 为 0；遍历数组 nums 中的所有元素，对于每个元素 x，在判断 x 之前，如果 count=0，先将 x 的值赋予 candidate，随后我们判断 x：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果 x 与 candidate 相等，那么计数器 count 的值增加 1；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果 x 与 candidate 不等，那么计数器 count 的值减少 1。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在遍历完成后，candidate 即为整个数组的众数。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;O(n), O(1)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; majorityElement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mp &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        mp[item]&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; mp[item] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; majorityElement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  candidate, count &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  for&lt;/span&gt;&lt;span&gt; _, num &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; count &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      candidate &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; num&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      count&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      break&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; cadidate &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; num {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      count&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      count&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; cadidate&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;10.把数组排成最小的数&lt;a href=&quot;#10把数组排成最小的数&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。例如输入数组{3，32，321}，则打印出这三个数字能排成的最小数字为 321323。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：排序算法，修改排序规则,O(nlogn)，O(n)&lt;/li&gt;
&lt;li&gt;设数组 numsnums 中任意两数字的字符串为 xx 和 yy ，则规定 排序判断规则 为：
&lt;ul&gt;
&lt;li&gt;若拼接字符串 x + y &amp;gt; y + xx+y&amp;gt;y+x ，则 xx “大于” yy ；
反之，若 x + y &amp;lt; y + xx+y&amp;lt;y+x ，则 xx “小于” yy ；&lt;/li&gt;
&lt;li&gt;xx “小于” yy 代表：排序完成后，数组中 xx 应在 yy 左边；“大于” 则反之。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; minNumber&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    sort.&lt;/span&gt;&lt;span&gt;Slice&lt;/span&gt;&lt;span&gt;(nums, &lt;/span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;j&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        m &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; strconv.&lt;/span&gt;&lt;span&gt;Itoa&lt;/span&gt;&lt;span&gt;(nums[i]) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; strconv.&lt;/span&gt;&lt;span&gt;Itoa&lt;/span&gt;&lt;span&gt;(nums[j])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        n &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; strconv.&lt;/span&gt;&lt;span&gt;Itoa&lt;/span&gt;&lt;span&gt;(nums[j]) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; strconv.&lt;/span&gt;&lt;span&gt;Itoa&lt;/span&gt;&lt;span&gt;(nums[i])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; m &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; n&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    })&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ans &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ans &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; strconv.&lt;/span&gt;&lt;span&gt;Itoa&lt;/span&gt;&lt;span&gt;(item)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; ans&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;11.数组中重复的数字&lt;a href=&quot;#11数组中重复的数字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如，如果输入长度为 7 的数组{2,3,1,0,2,5,3}，那么对应的输出是第一个重复的数字 2。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;思路：可以用 hash 来实现，遍历的时候，元素作为 key 存入 map，当出现重复元素时，判断 key 已存在，输出元素即可。O(n)，O(n)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;数组中数字范围在 0 ~ n-1 之间，可用现有数组设置标志，当一个数字被访问过后，设置对应位上的数 +n，之后再遇到相同的数时，会发现对应位上的数已经大于等于 n 了，直接返回这个数即可，这样不需要额外的数组或者 map 来处理，但是需要修改原数组。O(n)，O(1)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;// 哈希表&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; findRepeatNumber&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mp &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        mp[item]&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; mp[item] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;// 原地修改数组&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; findRepeatNumber&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, x &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; x &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; length {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            x &lt;/span&gt;&lt;span&gt;-=&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; nums[x] &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; length {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; x&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        nums[x] &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;12.滑动窗口的最大值&lt;a href=&quot;#12滑动窗口的最大值&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;给定一个数组和滑动窗口的大小，找出所有滑动窗口里数值的最大值。&lt;/p&gt;
&lt;p&gt;给定一个数组 nums 和滑动窗口的大小 k，请找出所有滑动窗口里的最大值。&lt;/p&gt;
&lt;p&gt;示例:&lt;/p&gt;
&lt;p&gt;输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7]
解释:&lt;/p&gt;
&lt;p&gt;滑动窗口的位置                最大值&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;[1  3  -1] -3  5  3  6  7       3
1 [3  -1  -3] 5  3  6  7       3
1  3 [-1  -3  5] 3  6  7       5
1  3  -1 [-3  5  3] 6  7       5
1  3  -1  -3 [5  3  6] 7       6
1  3  -1  -3  5 [3  6  7]      7&lt;/p&gt;
&lt;p&gt;提示：&lt;/p&gt;
&lt;p&gt;你可以假设 k 总是有效的，在输入数组不为空的情况下，1 ≤ k ≤ 输入数组的大小。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：
&lt;ul&gt;
&lt;li&gt;方法一：暴力求解，共有 n-k+1 个框，每个框求最大值, 时间复杂度 O((n-k+1)k)=O(nk)。&lt;/li&gt;
&lt;li&gt;方法二：&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; maxInWindows&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;k&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   length &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   if&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; ||&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; ||&lt;/span&gt;&lt;span&gt; length &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; k {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      return&lt;/span&gt;&lt;span&gt; nil&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   var&lt;/span&gt;&lt;span&gt; result []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; length&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;k; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      if&lt;/span&gt;&lt;span&gt; k &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         return&lt;/span&gt;&lt;span&gt; nums&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      temp &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; nums[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      for&lt;/span&gt;&lt;span&gt; j &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; j &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;k; j&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         if&lt;/span&gt;&lt;span&gt; nums[j] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; temp {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            temp &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nums[j]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;         }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(result, temp)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   return&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;13.构建乘积数组&lt;a href=&quot;#13构建乘积数组&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://leetcode.cn/problems/gou-jian-cheng-ji-shu-zu-lcof/&quot;&gt;构建乘积数组&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;给定一个数组 A[0,1,……,n-1]，请构建一个数组 B[0,1,……,n-1]，其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×……×A[i-1]×A[i+1]×……×A[n-1]。不能使用除法。&lt;/p&gt;
&lt;p&gt;示例:&lt;/p&gt;
&lt;p&gt;输入: [1,2,3,4,5]
输出: [120,60,40,30,24]&lt;/p&gt;
&lt;p&gt;提示：&lt;/p&gt;
&lt;p&gt;所有元素乘积之和不会溢出 32 位整数
a.length &amp;lt;= 100000&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：方法一：先将数组中所有元素相乘，然后遍历到那个元素直接除以该元素即可，但是如果数组中有 0 则失效。
&lt;ul&gt;
&lt;li&gt;方法二：构建左右乘积列表，遍历两次数组，得到左右两个乘积列表 L[i],R[i]。其中 L[i] = L[i-1]*a[i]。i 在[1,n-1],R[i]=R[i+1]*a[i] i 在[n-2,0],从后往前。O(n),O(n)&lt;/li&gt;
&lt;li&gt;方法三：在方法二的基础上，把结果数组和 L[i]共有，并且没有 R[i]，R 在动态创建。具体就是先初试话 res[i]为 L[i]，然后 R = R * a[i], res[i] = res[i]*R, R 更新 res[i]也在更新。 O(n)，O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; constructArr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(a) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    aLen &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(a)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    L, R, res &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, aLen), &lt;/span&gt;&lt;span&gt;make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, aLen), &lt;/span&gt;&lt;span&gt;make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, aLen)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    L[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], R[aLen&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; aLen; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        L[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; L[i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; a[i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        R[aLen&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; R[aLen&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; a[aLen&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; aLen; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        res[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; L[i] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; R[i]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; res&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; constructArr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(a) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    aLen &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(a)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    res &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, aLen)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    res[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; aLen; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        res[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; res[i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; a[i&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    R &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; aLen&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;; i&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        R &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; R &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; a[i&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        res[i] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; res[i] &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; R&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; res&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;14.二维数组中的查找&lt;a href=&quot;#14二维数组中的查找&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在一个二维数组中（每个一维数组的长度相同），每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：数组遍历，从右上角元素开始，大于目标元素则左移，小于目标元素则下移，直到找到或便利一遍为止.O(n)，O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; searchMatrix&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;matrix&lt;/span&gt;&lt;span&gt; [][]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; matrix &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; nil&lt;/span&gt;&lt;span&gt; ||&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(matrix[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    row &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    col &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(matrix[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    //从右上角元素开始，大于目标元素则左移，小于目标元素则下移，直到找到或便利一遍为止&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; row &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(matrix) &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; col &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; matrix[row][col] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            col &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt;  matrix[row][col] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            row &lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;15.顺时针打印矩阵&lt;a href=&quot;#15顺时针打印矩阵&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字。&lt;/p&gt;
&lt;p&gt;示例 1：&lt;/p&gt;
&lt;p&gt;输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出：[1,2,3,6,9,8,7,4,5]
示例 2：&lt;/p&gt;
&lt;p&gt;输入：matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出：[1,2,3,4,8,12,11,10,9,5,6,7]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：从左到右，从上到下，从右到左，从下到上依次遍历数组，用 l,r,t,b 四个指针用于限定遍历区间，遍历过程是循环的，每循环依次更新一次四个指针。O(mn)，O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img /&gt;&lt;figcaption&gt;image&lt;/figcaption&gt;&lt;/figure&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; spiralOrder&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;matrix&lt;/span&gt;&lt;span&gt; [][]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(matrix) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;{}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    m, n &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(matrix), &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(matrix[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ans &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    l, r, t, b &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;, n&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, m&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; r &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; t &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; b {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; l; i &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; r; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            ans &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(ans, matrix[t][i])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; b; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            ans &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(ans, matrix[i][r])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      	if&lt;/span&gt;&lt;span&gt; b &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; t {  &lt;/span&gt;&lt;span&gt;// 注意 从右到左遍历需要b&amp;gt;t，否则可能与从左到右遍历的同一行&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; r&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; l; i&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                ans &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(ans, matrix[b][i])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; r {  &lt;/span&gt;&lt;span&gt;// 注意 从下到上遍历需要l&amp;lt;r，否则可能与从上到下遍历的同一列&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; b&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; t&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;; i&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                ans &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(ans, matrix[i][l])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        l&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        r&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        t&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        b&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; ans&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;16.&lt;a href=&quot;https://leetcode.cn/problems/bu-ke-pai-zhong-de-shun-zi-lcof/&quot;&gt;扑克牌中的顺子&lt;/a&gt;&lt;a href=&quot;#16扑克牌中的顺子&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;从若干副扑克牌中随机抽 5 张牌，判断是不是一个顺子，即这 5 张牌是不是连续的。2～10 为数字本身，A 为 1，J 为 11，Q 为 12，K 为 13，而大、小王为 0 ，可以看成任意数字。A 不能视为 14。&lt;/p&gt;
&lt;p&gt;示例 1:&lt;/p&gt;
&lt;p&gt;输入: [1,2,3,4,5]
输出: True&lt;/p&gt;
&lt;p&gt;示例 2:&lt;/p&gt;
&lt;p&gt;输入: [0,0,1,2,5]
输出: True&lt;/p&gt;
&lt;p&gt;限制：&lt;/p&gt;
&lt;p&gt;数组长度为 5&lt;/p&gt;
&lt;p&gt;数组的数取值为 [0, 13] .&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：55 张牌是顺子的 &lt;strong&gt;充分条件&lt;/strong&gt; 如下：
&lt;ul&gt;
&lt;li&gt;除大小王外，所有牌 无重复 ；&lt;/li&gt;
&lt;li&gt;设此 55 张牌中最大的牌为 maxmax ，最小的牌为 minmin （大小王除外），则需满足：max - min &amp;lt; 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;判断重复问题用 map，最大值和最小值在遍历时用 ma，mi 标记。&lt;/li&gt;
&lt;li&gt;O(1)，O(1), mp 和 nums 只有 5 个数，所以 O(5)=O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; isStraight&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mp &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mi,ma &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 20&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            continue&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        mp[item]&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; mp[item] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; ma {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            ma &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; mi {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            mi &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; ma &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; mi &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;17.调整数组顺序使奇数位于偶数前面&lt;a href=&quot;#17调整数组顺序使奇数位于偶数前面&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有奇数在数组的前半部分，所有偶数在数组的后半部分。&lt;/p&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;p&gt;输入：nums = [1,2,3,4]
输出：[1,3,2,4]
注：[3,1,2,4] 也是正确的答案之一。&lt;/p&gt;
&lt;p&gt;提示：&lt;/p&gt;
&lt;p&gt;0 &amp;lt;= nums.length &amp;lt;= 50000
0 &amp;lt;= nums[i] &amp;lt;= 10000&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：
&lt;ul&gt;
&lt;li&gt;方法一：两个数组，一个保留奇数，一个保留偶数。O(n)，O(n).&lt;/li&gt;
&lt;li&gt;方法二：不用偶数切片，只需要先计算好奇数个数 count，然后偶数直接放在 ans 切片从 count 位置开始的后面即可。O(n)，O(1)&lt;/li&gt;
&lt;li&gt;方法三：前两种方法都保留了之前数字的相对位置，&lt;strong&gt;如果不用保留相对位置并且可以修改原数组的话&lt;/strong&gt;，可以用双指针从两端遍历，左指针找偶数，右指针找奇数，然后互换就行了。O(n)，O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; exchange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    odd, even &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; ==&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {  &lt;/span&gt;&lt;span&gt;// 奇数和1与运算为1，偶数与1与运算为0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            odd &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(odd, item)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            even &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(even, item)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    odd &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; append&lt;/span&gt;&lt;span&gt;(odd, even&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; odd&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; exchange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ans &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; make&lt;/span&gt;&lt;span&gt;([]&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(nums))&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    count &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; ==&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {  &lt;/span&gt;&lt;span&gt;// 奇数和1与运算为1，偶数与1与运算为0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            ans[count] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            count&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;		// 这里oddCount其实是下标&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; _, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; !=&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            ans[count] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            count&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; ans&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; exchange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    l, r &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; r {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        for&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; r &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; nums[l] &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; ==&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            l&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        for&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; r &lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; nums[r] &lt;/span&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; ==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            r&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; r {  &lt;/span&gt;&lt;span&gt;// 这里也需要判断l&amp;lt;r，因为前面两个for循环可能从l&amp;lt;r中跳出来即l=r，此时不需要交换。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            nums[l], nums[r] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; nums[r], nums[l]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        l&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        r&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; nums&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;18.0～n-1 中缺失的数字&lt;a href=&quot;#180n-1-中缺失的数字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一个长度为 n-1 的递增排序数组中的所有数字都是唯一的，并且每个数字都在范围 0～n-1 之内。在范围 0～n-1 内的 n 个数字中有且只有一个数字不在该数组中，请找出这个数字。&lt;/p&gt;
&lt;p&gt;示例 1:&lt;/p&gt;
&lt;p&gt;输入: [0,1,3]
输出: 2
示例 2:&lt;/p&gt;
&lt;p&gt;输入: [0,1,2,3,4,5,6,7,9]
输出: 8&lt;/p&gt;
&lt;p&gt;限制：&lt;/p&gt;
&lt;p&gt;1 &amp;lt;= 数组长度 &amp;lt;= 10000&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：缺失有三种情况：
&lt;ul&gt;
&lt;li&gt;1)在 0~n-1 中间缺少，比如 0,1,3。&lt;/li&gt;
&lt;li&gt;2)缺少最右边元素，比如 0,1&lt;/li&gt;
&lt;li&gt;3)缺少最左边元素，比如 1,2&lt;/li&gt;
&lt;li&gt;方法一：对于第一种和第三种，遍历一遍，对每个元素与下标对比，如果不相等就输出 item-1。第二种，会通过前面的判断，此时缺少的就是最右边元素，只需输出 len(nums)。O(n),O(1)&lt;/li&gt;
&lt;li&gt;方法二：二分查找，判断 nums[mid] 与 mid 是否相等，若相等则左边[0,mid]是从 0 开始连续的，mid 右移，否则不连续左移。当 l 与 r 相等时还要判断一次，比如到了[7,9]时，mid=7 == nums[mid] = 7，表示[0,7]都是有序的，mid 右移,此时 l = r = 8,还需要循环一次，mid=8 != nums[mid]=9 此时 r = mid-1, l &amp;gt; r 退出循环，l 所指位置即为所缺数字 8。如果缺最右边数字，比如 0,1，l 会一直在第一个判断中循环，最后 l=len(nums) &amp;gt; r 退出循环体。O(logn),O(1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; missingNumber&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; i, item &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt; nums {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; i {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; item&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; missingNumber&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    l, r &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; r {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        mid &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; l &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (r &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; l) &lt;/span&gt;&lt;span&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; nums[mid] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; mid {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            l &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            r &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; l&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;19.在排序数组中查找数字！&lt;a href=&quot;#19在排序数组中查找数字&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;统计一个数字在排序数组中出现的次数&lt;/p&gt;
&lt;p&gt;示例 1:&lt;/p&gt;
&lt;p&gt;输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:&lt;/p&gt;
&lt;p&gt;输入: nums = [5,7,7,8,8,10], target = 6
输出: 0&lt;/p&gt;
&lt;p&gt;提示：&lt;/p&gt;
&lt;p&gt;0 &amp;lt;= nums.length &amp;lt;= 105
-109 &amp;lt;= nums[i] &amp;lt;= 109
nums 是一个非递减数组
-109 &amp;lt;= target &amp;lt;= 109&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;思路：二分查找，找左右边界&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; search&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums) &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    lm, rm &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; getLeftMin&lt;/span&gt;&lt;span&gt;(nums, target), &lt;/span&gt;&lt;span&gt;getRightMax&lt;/span&gt;&lt;span&gt;(nums, target)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; rm &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; lm &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; rm &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;lm &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getLeftMin&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    left, right &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; left &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; right {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        mid &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; left &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (right&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;left)&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; nums[mid] &lt;/span&gt;&lt;span&gt;&amp;gt;=&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            right &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; nums[mid] &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            left &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; nums[left] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;func&lt;/span&gt;&lt;span&gt; getRightMax&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;nums&lt;/span&gt;&lt;span&gt; []&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span&gt; int&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    left, right &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; 0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(nums)&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; left &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; right {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        mid &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; left &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; (right&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;left&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; nums[mid] &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            right &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; if&lt;/span&gt;&lt;span&gt; nums[mid] &lt;/span&gt;&lt;span&gt;&amp;lt;=&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            left &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mid&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; nums[left] &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; target {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; -&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>category:笔记</category><category>tag:Go语言</category><category>tag:数组</category><category>tag:算法</category></item><item><title>爬虫项目-猫眼TOP100爬取</title><link>https://jimdeng.com/post/crawl-maoyan</link><guid isPermaLink="false">crawl-maoyan</guid><description>猫眼爬虫教程</description><pubDate>Fri, 06 Sep 2024 08:55:01 GMT</pubDate><content:encoded>&lt;h1&gt;爬取猫眼 TOP100 榜&lt;a href=&quot;#爬取猫眼-top100-榜&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h2&gt;1. 爬取流程&lt;a href=&quot;#1-爬取流程&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主要有以下四步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;爬取单页内容：利利⽤用 requests 请求⽬目标站点，得 到单个⽹网⻚页 HTML 代码，返回结果。&lt;/li&gt;
&lt;li&gt;正则表达式分析：根据 HTML 代码分析得到电影的 名称、主演、上映时间、评分、 图⽚片链接等信息。&lt;/li&gt;
&lt;li&gt;保存至文件：通过⽂文件的形式将结果保存，每 一部电影一个结果一行Json 字符串，图片保存成 jpg 格式。&lt;/li&gt;
&lt;li&gt;开启循环及多线程：对多⻚页内容遍历，开启多线程提 ⾼高抓取速度。&lt;/li&gt;
&lt;/ol&gt;
 
&lt;h2&gt;2. 具体分析&lt;a href=&quot;#2-具体分析&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;1. 爬取单页内容&lt;a href=&quot;#1-爬取单页内容&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;观察到每页的页数有 offset 这个变量来控制，100 条数据，10 页，每页 10 条，所以 offset 从 0 到 9。以 offset 作为变量，先爬取单页，然后循环爬取所有页。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;base_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;https://maoyan.com&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;https://maoyan.com/board/4?offset=&apos;&lt;/span&gt;&lt;span&gt; +&lt;/span&gt;&lt;span&gt; str&lt;/span&gt;&lt;span&gt;(offset)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;html &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; get_one_page(url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; get_one_page&lt;/span&gt;&lt;span&gt;(url):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.get(url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; response.status_code &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 200&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; response.text&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    except&lt;/span&gt;&lt;span&gt; RequestException:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;爬取部分通过 requests 中的 get 方法来实现，这是基本套路。正常情况下返回 200 状态码，非正常情况下返回 None&lt;/p&gt;
&lt;h3&gt;2. 正则表达式分析&lt;a href=&quot;#2-正则表达式分析&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; parse_one_page&lt;/span&gt;&lt;span&gt;(base_url, html):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    pattern &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re.compile(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;dd&amp;gt;.*?&amp;lt;i.*?board-index.*?&quot;&amp;gt;(\d+)&amp;lt;/i&amp;gt;.*?href=&quot;(.*?)&quot;.*?data-src=&quot;(.*?)&quot;.*?data-val=.*?&amp;gt;(.*?)&amp;lt;/a&amp;gt;.*?star&quot;&amp;gt;(.*?)&amp;lt;/p&amp;gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                         &apos;.*?releasetime&quot;&amp;gt;(.*?)&amp;lt;/p&amp;gt;.*?score.*?integer&quot;&amp;gt;(.*?)&amp;lt;/i&amp;gt;.*?fraction&quot;&amp;gt;(.*?)&amp;lt;/i&amp;gt;.*?&amp;lt;/dd&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;, re.S)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    items &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re.findall(pattern, html)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; items:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        yield&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;index&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;url&apos;&lt;/span&gt;&lt;span&gt;: base_url &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; item[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;image&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;title&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;actor&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;].strip()[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;:],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;time&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;].strip()[&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;:],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;score&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; item[&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这部分主要是正则表达式的书写，对于学爬虫的童鞋，正则是基本功，既基础又重要，不会的自行谷歌。虽然对于网页的解析有很多中方法，比如 BeautifulSoup，PyQuery 等，会一些网页前端的知识就能掌握，但是别人问你学了爬虫会正则吗，你好意思说不会吗？模式串写好了，然后通过 findall 方法爬取所有符合模式串的字符串，并返回给 items，这是一个列表。最后通过 yield 生成器生成一个字典返回&lt;/p&gt;
&lt;h3&gt;3. 保存文件&lt;a href=&quot;#3-保存文件&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; write_to_file&lt;/span&gt;&lt;span&gt;(content):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    with&lt;/span&gt;&lt;span&gt; open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;result.txt&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&apos;a&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # 当在下面打印出来是中文汉字，而写成的文件出现编码格式则在json转换时出问题了&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        f.write(json.dumps(content, &lt;/span&gt;&lt;span&gt;ensure_ascii&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# 每行字典转换成json，再加上&apos;\n&apos;,最后写入到文件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; download_image&lt;/span&gt;&lt;span&gt;(url):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Downloading&apos;&lt;/span&gt;&lt;span&gt;, url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.get(url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; response.status_code &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 200&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            save_image(response.content)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    except&lt;/span&gt;&lt;span&gt; ConnectionError&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; save_image&lt;/span&gt;&lt;span&gt;(content):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    file_path &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;{1}&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;{2}&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.format(os.getcwd() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; r&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;/images/&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, md5(content).hexdigest(), &lt;/span&gt;&lt;span&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    print&lt;/span&gt;&lt;span&gt;(file_path)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; not&lt;/span&gt;&lt;span&gt; os.path.exists(file_path):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        with&lt;/span&gt;&lt;span&gt; open&lt;/span&gt;&lt;span&gt;(file_path, &lt;/span&gt;&lt;span&gt;&apos;wb&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            f.write(content)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            f.close()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这部分其实是很简单，非常套路，不过要注意的是文件的编码问题，中文编码要用’utf-8’，当让还有其他编码，源码中可以找到。&lt;/p&gt;
&lt;h3&gt;4. 开启循环及多线程&lt;a href=&quot;#4-开启循环及多线程&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;pool &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Pool()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;pool.map(main, [i&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;)])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就是开一进程池，然后用调用 map 方法，写上循环次数搞定。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; requests&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; requests.exceptions &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; RequestException&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; json&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; multiprocessing &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Pool  &lt;/span&gt;&lt;span&gt;# 通过进程池实现多进程抓取&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; hashlib &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; md5&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; get_one_page&lt;/span&gt;&lt;span&gt;(url):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.get(url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; response.status_code &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 200&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; response.text&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    except&lt;/span&gt;&lt;span&gt; RequestException:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; parse_one_page&lt;/span&gt;&lt;span&gt;(base_url, html):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    pattern &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re.compile(&lt;/span&gt;&lt;span&gt;&apos;&amp;lt;dd&amp;gt;.*?&amp;lt;i.*?board-index.*?&quot;&amp;gt;(\d+)&amp;lt;/i&amp;gt;.*?href=&quot;(.*?)&quot;.*?data-src=&quot;(.*?)&quot;.*?data-val=.*?&amp;gt;(.*?)&amp;lt;/a&amp;gt;.*?star&quot;&amp;gt;(.*?)&amp;lt;/p&amp;gt;&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                         &apos;.*?releasetime&quot;&amp;gt;(.*?)&amp;lt;/p&amp;gt;.*?score.*?integer&quot;&amp;gt;(.*?)&amp;lt;/i&amp;gt;.*?fraction&quot;&amp;gt;(.*?)&amp;lt;/i&amp;gt;.*?&amp;lt;/dd&amp;gt;&apos;&lt;/span&gt;&lt;span&gt;, re.S)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    items &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re.findall(pattern, html)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; items:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        yield&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;index&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;url&apos;&lt;/span&gt;&lt;span&gt;: base_url &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; item[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;image&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;title&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;actor&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;].strip()[&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;:],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;time&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;].strip()[&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;:],&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            &apos;score&apos;&lt;/span&gt;&lt;span&gt;: item[&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; item[&lt;/span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; write_to_file&lt;/span&gt;&lt;span&gt;(content):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    with&lt;/span&gt;&lt;span&gt; open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;result.txt&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&apos;a&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # 当在下面打印出来是中文汉字，而写成的文件出现编码格式则在json转换时出问题了&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        f.write(json.dumps(content, &lt;/span&gt;&lt;span&gt;ensure_ascii&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &apos;&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;)  &lt;/span&gt;&lt;span&gt;# 每行字典转换成json，再加上&apos;\n&apos;,最后写入到文件&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; download_image&lt;/span&gt;&lt;span&gt;(url):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Downloading&apos;&lt;/span&gt;&lt;span&gt;, url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requests.get(url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        if&lt;/span&gt;&lt;span&gt; response.status_code &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; 200&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            save_image(response.content)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    except&lt;/span&gt;&lt;span&gt; ConnectionError&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        return&lt;/span&gt;&lt;span&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; save_image&lt;/span&gt;&lt;span&gt;(content):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    file_path &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;&lt;/span&gt;&lt;span&gt;{0}&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;{1}&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;{2}&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;.format(os.getcwd() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; r&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;/images/&lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;, md5(content).hexdigest(), &lt;/span&gt;&lt;span&gt;&apos;jpg&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    print&lt;/span&gt;&lt;span&gt;(file_path)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    if&lt;/span&gt;&lt;span&gt; not&lt;/span&gt;&lt;span&gt; os.path.exists(file_path):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        with&lt;/span&gt;&lt;span&gt; open&lt;/span&gt;&lt;span&gt;(file_path, &lt;/span&gt;&lt;span&gt;&apos;wb&apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; f:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            f.write(content)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            f.close()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; main&lt;/span&gt;&lt;span&gt;(offset):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    base_url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;https://maoyan.com&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;https://maoyan.com/board/4?offset=&apos;&lt;/span&gt;&lt;span&gt; +&lt;/span&gt;&lt;span&gt; str&lt;/span&gt;&lt;span&gt;(offset)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    html &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; get_one_page(url)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # print(html)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    for&lt;/span&gt;&lt;span&gt; item &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; parse_one_page(base_url, html):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        print&lt;/span&gt;&lt;span&gt;(item)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        write_to_file(item)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        download_image(item[&lt;/span&gt;&lt;span&gt;&apos;image&apos;&lt;/span&gt;&lt;span&gt;])&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; __name__&lt;/span&gt;&lt;span&gt; ==&lt;/span&gt;&lt;span&gt; &apos;__main__&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # for i in range(10):&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    #     main(i*10)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    # 先构造一个进程池，然后使用map方法，让进程进入进程池&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    pool &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Pool()&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    pool.map(main, [i&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; range&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;)])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><category>category:笔记</category><category>tag:爬虫</category><category>tag:猫眼</category><category>tag:Python</category></item></channel></rss>