leetcode27_删除元素
题目链接:https://leetcode-cn.com/problems/remove-element/
方法1——首位指针
首指针在头,尾指针在末尾,如果首指针指的是val,则交换。
public int removeElement(int[] nums, int val) {
int l = 0, r = nums.length;
while (l < r) {
if(nums[l] == val) {
nums[l] = nums[r-1];
r--;
}
else {
l++;
}
}
return l;
}
方法2——快慢指针
删除元素之后得到是一个新数组,称之为输出数组,原数组称之为输入数组。为了省空间,可以直接把输出数组写在输入数组的空间上。
为了遍历输入和输出数组,声明两个指针分别指向这两个数组。
当输入变量等于val时,没有资格输出到输出数组;当输入变量不等于val时,则直接输出到输出数组。
这里最重要的一个转化就是把删除直接变成了输出数组。
public int removeElement(int[] nums, int val) {
int len = nums.length;
int input = 0, output = 0;
for(;output< len; output++) {
if(nums[output] != val) {
nums[input] = nums[output];
input++;
}
}
return input;
}