题目;力扣https://leetcode-cn.com/problems/remove-element/
class Solution {
public int removeElement(int[] nums, int val) {
if(nums.length<1){
return nums.length;
}
int i = 0;
int j = 0;
while(j<nums.length){
if(nums[j]==val){
j++;
}else{
nums[i] = nums[j];
i++;
j++;
}
}
return i;
}
}
思路:这题跟leetcode26.删除有序数组中的重复项 基本差不多,只不过是把判断的条件改一改。大概思路还是“双指针”的方法。
1.特殊条件判断。此处的判断条件与leetcode26稍稍有些不一样,leetcode26是删除重复项,所以传入数组的长度应不小于2;这题是删除特定的值,对于传入数组的长度要求为不为0。
if(nums.length<1){
return nums.length;
}
2.定义双指针。i指向“新”数组,j指向“旧”数组。(其实本质上,两条指针仍然指向同一数组。)
int i = 0;
int j = 0;
3.判断是否为val值,若是则跳过,若不是则将其放入“新”数组规定位置。这里就是leetcode26故技重施,只不过判断的条件改变了而已。
while(j<nums.length){
if(nums[j]==val){
j++;
}else{
nums[i] = nums[j];
i++;
j++;
}
4.返回“新”数组的长度即可。
return i;