贾雨石 發表於 2025-6-27 17:39:00

hot100之技巧组题目

<h3 id="只出现一次的数字136">只出现一次的数字(136)</h3>
<pre><code class="language-java">class Solution {
    public int singleNumber(int[] nums) {
      int res = 0;
      for (int num : nums){
            res ^= num;
      }
      return res;
    }
}
</code></pre>
<ul>
<li>分析</li>
</ul>
<p>异或</p>
<h3 id="多数元素169">多数元素(169)</h3>
<pre><code class="language-java">class Solution {
    public int majorityElement(int[] nums) {
      int res = nums;
      int count = 0;

      for (int num : nums){
            if (num == res) count++;
            else{
                if (count == 0) res = num;
                else count -= 1;
            }
      }

      return res;
    }
}
</code></pre>
<ul>
<li>分析</li>
</ul>
<p>将元素分为&lt;此元素&gt;和&lt;其他元素&gt;进行统计</p>
<h3 id="颜色分类075">颜色分类(075)</h3>
<pre><code class="language-java">class Solution {
    public void sortColors(int[] nums) {
      int cursor_0 = 0;
      int cursor_2 = nums.length -1;
      int idx = 0;

      while (idx &lt;= cursor_2){
            if (nums == 0) swap(idx++, cursor_0++, nums);
            else if (nums==2) swap(idx, cursor_2--, nums);
            else idx++;
      }
    }
}
</code></pre>
<ul>
<li>分析</li>
</ul>
<p>双指针</p>
<h3 id="下一个排列031">下一个排列(031)</h3>
<pre><code class="language-java">class Solution {
    public void nextPermutation(int[] nums) {
      int n = nums.length;
      int i = n-2;
      while (i &gt;= 0 &amp;&amp; nums &gt;= nums)i--;
      
      if (i &lt; 0) {
            reverse(nums, 0);
            return;
      }
      
      int j = nums.length -1;
      while (j &gt; i &amp;&amp; nums &lt;= nums) j--;
      swap(i, j, nums);

      reverse(nums, i+1);
    }
}
</code></pre>
<ul>
<li>分析</li>
</ul>
<ol>
<li>从右到左找到最大逆序数组→逆序数组翻转可得到最小数组(无逆序数组, 后续直接交换即为最小)</li>
<li>为得到&lt;最小更大排列&gt; , 我们需要从逆序数组中找到&lt;最小更大&gt;值跟<code>nums</code>交换</li>
<li>翻转逆序数组</li>
</ol>
<h3 id="寻找重复数287">寻找重复数(287)</h3>
<pre><code class="language-java">class Solution {
    public int findDuplicate(int[] nums) {
      int fast = 0;
      int slow = 0;
      slow = nums;
      fast = nums];

      while (fast != slow){
            slow = nums;
            fast = nums];
      }
      int prev1 = 0;
      int prev2 = slow;

      while (prev1 != prev2){
            prev1 = nums;
            prev2 = nums;
      }

      return prev1;
    }
}
</code></pre>
<ul>
<li>分析</li>
</ul>
<p>根据&lt;唯一性&gt;,很巧妙的转化成了环形链表</p>
<p>索引重复则有环</p>
<blockquote>
<p>在学校的最后一天,二刷hot100完成🥰🥰</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/many-bucket/p/18952760
頁: [1]
查看完整版本: hot100之技巧组题目