写法一: 双指针
class Solution {
public int removeElement(int[] nums, int val) {
// 双指针
int ans = nums.length;
int i = 0, j = nums.length - 1;
while(i <= j){
if(nums[i] == val && nums[j] != val){
nums[i] = nums[j];
i++;
j--;
ans--;
}else if(nums[i] == val && nums[j] == val){
j--;
ans--;
}else if(nums[i] != val && nums[j] == val){
i++;
j--;
ans--;
}else{
i++;
}
}
return ans;
}
}
写法二:
// way 2:
class Solution {
public int removeElement(int[] nums, int val) {
int index = 0;
for(int num : nums){
if(num != val){
nums[index++] = num;
}
}
return index;
}
}
写法三:
// way 3:
class Solution {
public int removeElement(int[] nums, int val) {
int i = 0, j = nums.length - 1;
while(i <= j){
if(nums[i] == val){
nums[i] = nums[j];
j--;
}else{
i++;
}
}
return i;
}
}