移除数组nums里边值为val的元素。双指针的思想。
p指向数组的头部,q指向数组的尾部。
①p从后往前,找到第一个不是val的位置。
②如果p的值等于val,那么将q位置上的元素放在p位置上。然后p++,q–
③重复直到p==q。
④如果p和q相遇了,那么判断p和q位置上的值是不是val,是的话p–,q–
⑤在这个过程中,设置一个count来记录值为val的元素的个数,如果p和q位置上的元素值是val,count+1,最后返回数组元素的个数nums.length-count
class Solution {
public int removeElement(int[] nums, int val) {
if(nums==null||nums.length==0){
return 0;
}
int p=0;
int q=nums.length-1;
int count=0;
while (p<q){
if(nums[q]==val){
q--;
count++;
}
else if(nums[p]==val){
nums[p]=nums[q];
q--;
p++;
count++;
}
else{
p++;
}
}
if(p==q&&nums[p]==nums[q]&&nums[q]==val){
p--;
q--;
count++;
}
return nums.length-count;
}
}