Question
Analysis
给定一个数组,移除其中的指定值value,并返回移除掉指定值后新数组的长度。
Answers
- Two pointers
通过构造两个指针i、j,当nums[j]!=val时,将nums[j]赋给nums[i];当nums[j]=val时,直接跳过这个值。
public int removeElement(int[] nums,int val){
int i=0;
for (int j=0;j<nums.length;j++){
if (nums[j] != val){
nums[i]=nums[j];
i++;
}
}
return i;
}
- Two Pointers - when elements to remove are rare
当i的值小于n时,如果nums[i]=val,则将nums[n-1]也就是数组的最后一个值赋给nums[¡],之后n--,将数组最后一位去掉,等同于去掉与val相等的那个值,之后进行的迭代会将原数组的最后一位与val进行比较,循环下去;如果nums[i]!=val,则i++,将比较位后移一位,一直比较到数组的最后一位,最终输出n即可。
public int removeElement(int[] nums;int val){
int i=0;
int n=nums.length;
while (i<n){
if(nums[i]=val){
nums[i]=nums[n-1];
n--;
}
else{
i++;
}
}
return n;
}