使用原始删除方式
/**
* 数组中元素的删除
*
* @param arr 数组引用
* @param size 数组中存储的元素数量,这个不等同于数组的大小
* @param key 删除的值
* @return 返回最新数组中存储的元素数量
*/
public static int removeByElement(int[] arr, int size, int val) {
int index = -1;
for (int i = 0; i < size; i++) {
if (arr[i] == val) index = i;
break;
}
//数据前移
if (index != -1) {
for (int j = index; j < size - 1; j++)
arr[j] = arr[j + 1];
size--;
}
return size;
}
双指针方式
/**
* 使用双指针的方式进行数据的删除
* @param nums
* @param val
* @return
*/
public static int removeElement(int []nums,int val) {
int slow = 0;
//fast充当了快指针的角色
for(int fast=0;fast<nums.length;fast++) {
if (nums[fast]!=val) {
nums[slow]=nums[fast];
slow++;
}
}
//最后剩余元素的数量
return slow;
}
题目:原地移除所有数值等于val的元素
在如上例子中如果要是使用原始删除的方式就要调用多次方法来实现,如果使用双指针来实现只需要遍历一次就可以。