题目
Given an array and a value, remove all instances of that value in place and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example:
Given input array nums = [3,2,2,3]
, val = 3
Your function should return length = 2, with the first two elements of nums being 2.
思路
设置两个iterator,i和length,i每次自增1,遍历整个数组,length为实际上剔除val的数组的下标,随着i的遍历,当遇到与val相等的时候则直接跳过,不相等则length+1,即实际上的数组长度加1,并且把此时i位置的值复制到实际位置length上去。
代码
public class Solution {
public int removeElement(int[] nums, int val) {
int length = 0;
for(int i = 0 ; i < nums.length ; ++ i){
if(val != nums[i]){
nums[length++] = nums[i];
}
}
return length;
}
}