题目描述:题目链接
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
- 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
- 返回 k。
解法:
方法一:暴力解
class Solution {public int removeElement(int[] nums, int val){int size = nums.length;for(int i = 0; i <= size - 1; i++){// 发现需要移除的元素,将移除元素后的元素集体前移if(nums[i] == val){for(int j = i + 1; j<= size -1; j++){nums[j - 1] = nums[j];}// 因为i下标之后的位置都向前移了一位,所以i也向前移一位i--;size--;}}return size;}
}
方法二:快慢指针
class Solution {public int removeElement(int[] nums, int val){int slowIndex = 0;for(int fastIndex = 0; fastIndex <= nums.length - 1; fastIndex ++){// 如果快指针指向的元素不是需要删除的元素if(nums[fastIndex] != val){// 将快指针指向的元素赋值到慢指针的位置,同时慢指针后移一位。nums[slowIndex++] = nums[fastIndex]; }}return slowIndex;}
}