Skip to content

3月9日日报(双指针1)

约 343 字大约 1 分钟

日报leetcode

2026-03-09

  • 完成双指针的学习与训练,做了三道相关简单题目,任重道远,慢慢刷 hot100 吧
  • 基础太不牢固了,接着刷 hot100 能顺便巩固一下
  • 背了一点点单词
  • 顺便看一下 Java 的八股
  • 继续看 趣味网络图解

双指针的学习

核心思想是原地修改
双指针算法的本质是利用两个移动速度或策略不同的指针,在不借助额外数组(空间复杂度 O(1)O(1))的情况下,完成对数组的筛选、移动或去重

  • 第一个指针(快指针) 负责遍历整个数组,寻找符合要求的元素
  • 第二个指针(慢指针) 负责指向“处理好的新数组”的末尾,即下一个好元素应该存放的位置

例子

移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作

class Solution {
    public void moveZeroes(int[] nums) {
        int n = nums.length, fast = 0, slow = 0;
        while(fast < n) {
            if (nums[fast] != 0) {
                swap(nums, fast, slow);
                slow++;
            }
            fast++;
        }
    }
    public void swap(int[] nums, int fast, int slow) {
        int temp = nums[fast];
        nums[fast] = nums[slow];
        nums[slow] = temp;
    }
}