Question
Analysis
给定一个数组,移除其中的指定值value,并返回移除掉指定值后新数组的长度。
Answers
Two pointers
通过构造两个指针i、j,当nums[j]!=val时,将nums[j]赋给nums[i];当nums[j]=val时,直接跳过这个值。1
2
3
4
5
6
7
8
9
10public 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; }