27.LeetCode - 移除元素

107 阅读1分钟

前言

你好, 我是Cici。我打算系统的刷一刷题,谈谈自己的思路,说说自己的思考,加强自己的同时也希望能给大家带来帮助。其实数据结构和算法属于我们技术人员的内功,不管技术怎么更新,它始终都是不变的。

一、问题描述

原题链接:27. 移除元素

观察题目,我们可以得到的关键信息有:

  • 需要原地移除元素
  • 必须仅使用 O(1) 额外空间并 原地修改输入数组
  • 不需要考虑数组中超出新长度后面的元素

二、题目分析

由关键信息,考虑使用快慢双指针。只需要在一定条件时,将快指针指向的元素赋值给慢指针即可。
解题思路:

  • 定义快慢指针 fast slow ,一开始都指向数组的第一个元素
  • 如果快指针指向的元素不等于 val ,此时将快指针指向的元素赋值给慢指针nums[slow] = nums[fast],并且slow++
  • 每次遍历时 fast++

三、参考代码

class Solution {
    public int removeElement(int[] nums, int val) {
        int fast = 0;
        int slow;
        for(slow = 0; fast < nums.length; fast++){
            if(nums[fast] != val){
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }
}