双层循环(时间复杂度:O(n2))
/**
* 移除元素 双层for循环
* */
public int removeElementFor(int[] nums, int val) {
int length = nums.length;
for (int i = 0; i < length; i++) { //循环数组
if (nums[i] == val){
for (int j = i; j < length - 1; j++) { //更新数组
nums[j] = nums[j+1];
}
i--; //被更新后值有可能还是val,所以还是要从更新的位置继续检测
length--;
}
}
return length;
}
双指针法(时间复杂度:O(n))
/**
* 移除元素 双指针
* */
public int removeElement(int[] nums, int val) {
int fastIndex = 0;
int showIndex;
for (showIndex = 0;fastIndex < nums.length;fastIndex++){
if (nums[fastIndex] != val){
nums[showIndex] = nums[fastIndex];
showIndex++;
}
}
return showIndex;
}