自己解法
这题和删除排序数组中重复的元素类似,都是将后面的元素往前移,所以只要维护好有效数组的下标就好了。
class Solution {
public int removeElement(int[] nums, int val) {
int j = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != val) {
nums[j] = nums[i];
j++;
}
}
return j;
}
}
官方解法
双指针解法,一个指针前遍历,一个指针从后遍历,前面指针等于val时,用后面指针内容覆盖前面指针内容,后面指针减一,重新进行判断,直到两者相遇。
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];
// reduce array size by one
n--;
} else {
i++;
}
}
return n;
}
网友评论