给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-element
方法一
public int removeElement(int[] nums, int val) {
int fast = 0;
int slow = 0;
while (fast<nums.length){
if(nums[fast] != val)
nums[slow++] = nums[fast];
fast++;
}
return slow;
}
方法二
int valIndex = 0;
int notValIndex = 0;
while(notValIndex < nums.length){
while(valIndex < nums.length && nums[valIndex] != val)
valIndex++;
notValIndex = valIndex+1;
while (notValIndex < nums.length && nums[notValIndex] == val )
notValIndex++;
if (notValIndex >= nums.length)
break;
int temp = nums[notValIndex];
nums[notValIndex] = nums[valIndex];
nums[valIndex] = temp;
}
return valIndex;```