<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>哈希 on On My Way</title>
    <link>https://tuanzi-wow.cn/tags/%E5%93%88%E5%B8%8C/</link>
    <description>Recent content in 哈希 on On My Way</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Sun, 06 Sep 2026 00:00:00 +0800</lastBuildDate>
    <atom:link href="https://tuanzi-wow.cn/tags/%E5%93%88%E5%B8%8C/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>HOT100 · 普通数组</title>
      <link>https://tuanzi-wow.cn/leetcode%E5%88%B7%E9%A2%98%E8%AE%B0%E5%BD%95/hot100/hot100-array/</link>
      <pubDate>Sun, 06 Sep 2026 00:00:00 +0800</pubDate>
      <guid>https://tuanzi-wow.cn/leetcode%E5%88%B7%E9%A2%98%E8%AE%B0%E5%BD%95/hot100/hot100-array/</guid>
      <description>HOT100 普通数组专题：合并区间、轮转数组、除自身以外数组的乘积与缺失的第一个正数。</description>
      <content:encoded><![CDATA[<h3 id="1合并区间">1.合并区间</h3>
<h4 id="题目描述">题目描述：</h4>
<p>以数组 <code>intervals</code> 表示若干个区间的集合，其中单个区间为 <code>intervals[i] = [starti, endi]</code> 。请你合并所有重叠的区间，并返回 <em>一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间</em> 。</p>
<p><strong>示例 1：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入：intervals = [[1,3],[2,6],[8,10],[15,18]]
</span></span><span class="line"><span class="cl">输出：[[1,6],[8,10],[15,18]]
</span></span><span class="line"><span class="cl">解释：区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例 2：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入：intervals = [[1,4],[4,5]]
</span></span><span class="line"><span class="cl">输出：[[1,5]]
</span></span><span class="line"><span class="cl">解释：区间 [1,4] 和 [4,5] 可被视为重叠区间。
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例 3：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入：intervals = [[4,7],[1,4]]
</span></span><span class="line"><span class="cl">输出：[[1,7]]
</span></span><span class="line"><span class="cl">解释：区间 [1,4] 和 [4,7] 可被视为重叠区间。
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>提示：</strong></p>
<ul>
<li><code>1 &lt;= intervals.length &lt;= 104</code></li>
<li><code>intervals[i].length == 2</code></li>
<li><code>0 &lt;= starti &lt;= endi &lt;= 104</code></li>
</ul>
<h4 id="解1排序">解1.排序</h4>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">class Solution:
</span></span><span class="line"><span class="cl">    def merge(self, intervals: List[List[int]]) -&gt; List[List[int]]:
</span></span><span class="line"><span class="cl">        intervals.sort(key=lambda x:x[0])
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        if len(intervals)==1:
</span></span><span class="line"><span class="cl">            return intervals
</span></span><span class="line"><span class="cl">        ans=[]
</span></span><span class="line"><span class="cl">        ans.append(intervals[0])
</span></span><span class="line"><span class="cl">        cur=0
</span></span><span class="line"><span class="cl">        for i in range(1,len(intervals)):
</span></span><span class="line"><span class="cl">            if intervals[i][0]&lt;=ans[-1][1]:
</span></span><span class="line"><span class="cl">                ans[-1][1] = max(ans[-1][1], intervals[i][1])
</span></span><span class="line"><span class="cl">            else:
</span></span><span class="line"><span class="cl">                ans.append(intervals[i])
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        return ans   
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="解2">解2.</h4>
<p>通过一个cnt数组记录落位，cnt[i]&gt;1的连续区间即为最终的区间
方法：对于一个区间[start,end]，从cnt[start],cnt[start+1],&hellip;,cnt[end]全部加1
缺陷：[1,2],[3,4]本无法合并，按上述方法却可以合并，解决：*2</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="k">class</span> <span class="n">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">merge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">intervals</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="ne">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="ne">int</span><span class="p">]]:</span>
</span></span><span class="line"><span class="cl">        <span class="n">mx</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">intervals</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">diff</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">mx</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span> <span class="ow">in</span> <span class="n">intervals</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="c1"># 把区间 [start*2, end*2] 增加 1</span>
</span></span><span class="line"><span class="cl">            <span class="n">diff</span><span class="p">[</span><span class="n">start</span> <span class="o">*</span> <span class="mi">2</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">            <span class="n">diff</span><span class="p">[</span><span class="n">end</span> <span class="o">*</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">        <span class="n">ans</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">        <span class="n">sum_d</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">        <span class="n">start</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>  <span class="c1"># -1 表示尚未遇到合并后的区间左端点</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">enumerate</span><span class="p">(</span><span class="n">diff</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="n">sum_d</span> <span class="o">+=</span> <span class="n">d</span>  <span class="c1"># 计算 diff 的前缀和</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">sum_d</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">if</span> <span class="n">start</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                    <span class="n">start</span> <span class="o">=</span> <span class="n">i</span>  <span class="c1"># 合并后的区间左端点</span>
</span></span><span class="line"><span class="cl">            <span class="k">elif</span> <span class="n">start</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="c1"># i-1 是合并后的区间右端点</span>
</span></span><span class="line"><span class="cl">                <span class="c1"># 由于乘 2 操作，区间左右端点都是偶数，所以 i-1 是偶数，i 是奇数，(i-1)/2 == floor(i/2)</span>
</span></span><span class="line"><span class="cl">                <span class="n">ans</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">start</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">i</span> <span class="o">//</span> <span class="mi">2</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">                <span class="n">start</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># 注：最后一轮循环 sum_d == 0，我们不会漏掉最后一个区间</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">ans</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="轮转数组">轮转数组</h3>
<h4 id="题目描述-1">题目描述:</h4>
<p>给定一个整数数组 <code>nums</code>，将数组中的元素向右轮转 <code>k</code> 个位置，其中 <code>k</code> 是非负数。</p>
<p><strong>示例 1:</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入: nums = [1,2,3,4,5,6,7], k = 3
</span></span><span class="line"><span class="cl">输出: [5,6,7,1,2,3,4]
</span></span><span class="line"><span class="cl">解释:
</span></span><span class="line"><span class="cl">向右轮转 1 步: [7,1,2,3,4,5,6]
</span></span><span class="line"><span class="cl">向右轮转 2 步: [6,7,1,2,3,4,5]
</span></span><span class="line"><span class="cl">向右轮转 3 步: [5,6,7,1,2,3,4]
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例 2:</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入：nums = [-1,-100,3,99], k = 2
</span></span><span class="line"><span class="cl">输出：[3,99,-1,-100]
</span></span><span class="line"><span class="cl">解释: 
</span></span><span class="line"><span class="cl">向右轮转 1 步: [99,-1,-100,3]
</span></span><span class="line"><span class="cl">向右轮转 2 步: [3,99,-1,-100]
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>提示：</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 105</code></li>
<li><code>-231 &lt;= nums[i] &lt;= 231 - 1</code></li>
<li><code>0 &lt;= k &lt;= 105</code></li>
</ul>
<h4 id="题解自己看很简单">题解：自己看，很简单</h4>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">class Solution:
</span></span><span class="line"><span class="cl">    def rotate(self, nums: List[int], k: int) -&gt; None:
</span></span><span class="line"><span class="cl">        &#34;&#34;&#34;
</span></span><span class="line"><span class="cl">        Do not return anything, modify nums in-place instead.
</span></span><span class="line"><span class="cl">        &#34;&#34;&#34;
</span></span><span class="line"><span class="cl">        k=k%len(nums)
</span></span><span class="line"><span class="cl">        p=nums[-k:]
</span></span><span class="line"><span class="cl">        del nums[-k:]
</span></span><span class="line"><span class="cl">        nums[0:0]=p
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="3除了自身以数组的乘积">3.除了自身以数组的乘积</h3>
<h4 id="题目描述-2">题目描述</h4>
<p>给你一个整数数组 <code>nums</code>，返回 数组 <code>answer</code> ，其中 <code>answer[i]</code> 等于 <code>nums</code> 中除了 <code>nums[i]</code> 之外其余各元素的乘积 。</p>
<p>题目数据 <strong>保证</strong> 数组 <code>nums</code>之中任意元素的全部前缀元素和后缀的乘积都在 <strong>32 位</strong> 整数范围内。</p>
<p>请 **不要使用除法，**且在 <code>O(n)</code> 时间复杂度内完成此题。</p>
<p><strong>示例 1:</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入: nums = [1,2,3,4]
</span></span><span class="line"><span class="cl">输出: [24,12,8,6]
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例 2:</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入: nums = [-1,1,0,-3,3]
</span></span><span class="line"><span class="cl">输出: [0,0,9,0,0]
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="题解">题解：</h4>
<p>计算前乘积和后乘积，两者相乘即可</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">productExceptSelf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span>
</span></span><span class="line"><span class="cl">        <span class="n">m</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="n">suf</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">m</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span><span class="o">-</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="n">suf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">suf</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        
</span></span><span class="line"><span class="cl">        <span class="n">per</span> <span class="o">=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">nums</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="n">suf</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">*=</span> <span class="n">per</span>
</span></span><span class="line"><span class="cl">            <span class="n">per</span> <span class="o">*=</span> <span class="n">num</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">suf</span>
</span></span><span class="line"><span class="cl">        <span class="c1">#time O(m)</span>
</span></span><span class="line"><span class="cl">        <span class="c1">#space O(1) </span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="4hard-缺失的第一个正数">4.Hard 缺失的第一个正数</h3>
<h4 id="题目描述-3">题目描述：</h4>
<p>给你一个未排序的整数数组 <code>nums</code> ，请你找出其中没有出现的最小的正整数。</p>
<p>请你实现时间复杂度为 <code>O(n)</code> 并且只使用常数级别额外空间的解决方案。</p>
<p><strong>示例 1：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入：nums = [1,2,0]
</span></span><span class="line"><span class="cl">输出：3
</span></span><span class="line"><span class="cl">解释：范围 [1,2] 中的数字都在数组中。
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例 2：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入：nums = [3,4,-1,1]
</span></span><span class="line"><span class="cl">输出：2
</span></span><span class="line"><span class="cl">解释：1 在数组中，但 2 没有。
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例 3：</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">输入：nums = [7,8,9,11,12]
</span></span><span class="line"><span class="cl">输出：1
</span></span><span class="line"><span class="cl">解释：最小的正数 1 没有出现。
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="题解-1">题解</h4>
<p>意识到ans &lt;= len(nums)，然后依次判断i是否in nums即可</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Solution</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">firstMissingPositive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nums</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">a</span><span class="o">=</span><span class="nb">set</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">nums</span><span class="p">)</span><span class="o">+</span><span class="mi">2</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="k">return</span> <span class="n">i</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>还有一个题解我看着很有思路，虽然执行时间更长，但是包含了本地标记的思想，通过hashsize进行本地标记，挺有意思的，我把代码贴上去</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">class Solution:
</span></span><span class="line"><span class="cl">    def firstMissingPositive(self, nums: List[int]) -&gt; int:
</span></span><span class="line"><span class="cl">        n = len(nums)
</span></span><span class="line"><span class="cl">        hash_size = n + 1
</span></span><span class="line"><span class="cl">        # 可能的答案为1, 2, ..., n + 1
</span></span><span class="line"><span class="cl">        # 处理掉取值范围外的数
</span></span><span class="line"><span class="cl">        for i in range(n):
</span></span><span class="line"><span class="cl">            if nums[i] &lt;= 0 or nums[i] &gt;= hash_size:
</span></span><span class="line"><span class="cl">                nums[i] = 0
</span></span><span class="line"><span class="cl">        for i in range(n):
</span></span><span class="line"><span class="cl">            if nums[i] % hash_size != 0:
</span></span><span class="line"><span class="cl">                pos = (nums[i] % hash_size) - 1
</span></span><span class="line"><span class="cl">                # 先取余再加，防止数字过大
</span></span><span class="line"><span class="cl">                nums[pos] = (nums[pos] % hash_size) + hash_size
</span></span><span class="line"><span class="cl">        for i in range(n):
</span></span><span class="line"><span class="cl">            if nums[i] &lt; hash_size:
</span></span><span class="line"><span class="cl">                return i + 1
</span></span><span class="line"><span class="cl">        return hash_size
</span></span></code></pre></td></tr></table>
</div>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>
