题目:移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1:
给定 nums = [3,2,2,3], val = 3,
函数应该返回新的长度 2。
示例 2:
给定 nums = [0,1,2,2,3,0,4,2], val = 2,
函数应该返回新的长度 5。
思路:
1.判断是否为空。
2.创建两个指针,i 为慢指针,j 为快指针。
3.快指针从 0 开始遍历,当快指针 j 等于 val 时,继续遍历。
4.当快指针 j 不等于 val 时,将快指针 j 对应的元素赋予慢指针 i,然后 i++。遍历完毕,慢指针对应的所有元素即为新数组。
注意点:
1.遍历时快指针从旧数组下标 0 开始。
2.慢指针 i 先赋值,后移位。
代码:
public class demo27 {
public static void main(String[] args) {
int nums[] = {1,1,2,2,3};
int len = new Solution27().removeElement(nums, 1);
System.out.println(len);
for (int i = 0; i < len; i++) {
System.out.println(nums[i]);
}
}
}
class Solution27 {
public int removeElement(int[] nums, int val) {
// 1.判断是否为空
if (nums.length == 0) {
return 0;
}
// 2.创建两个指针,i 为慢指针,j 为快指针
int i = 0;
// 3.快指针从 0 开始遍历,当快指针 j 等于 val 时,继续遍历
// 4.当快指针 j 不等于 val 时,将快指针 j 对应的元素赋予慢指针 i,然后 i++。遍历完毕,慢指针对应的所有元素即为新数组
for (int j = 0; j < nums.length; j++) {
if (nums[j] != val) {
nums[i] = nums[j];
i++;
}
}
return i;
}
}