前言
你好, 我是Cici。我打算系统的刷一刷题,谈谈自己的思路,说说自己的思考,加强自己的同时也希望能给大家带来帮助。其实数据结构和算法属于我们技术人员的内功,不管技术怎么更新,它始终都是不变的。
一、问题描述
原题链接:27. 移除元素
观察题目,我们可以得到的关键信息有:
- 需要
原地移除元素 - 必须仅使用
O(1)额外空间并 原地修改输入数组。 - 不需要考虑数组中超出新长度后面的元素
二、题目分析
由关键信息,考虑使用快慢双指针。只需要在一定条件时,将快指针指向的元素赋值给慢指针即可。
解题思路:
- 定义快慢指针
fastslow,一开始都指向数组的第一个元素 - 如果快指针指向的元素不等于
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;
}
}