题目:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
返回 k。
class Solution {
public int removeElement(int[] nums, int val) {
int k = nums.length;
for (int i = 0; i < k; i++) {
if (nums[i] == val) {
k--;
for (int j = i; j < k; j++) {
nums[j] = nums[j + 1];
}
i-- ;
}
}
return k;
}
}
思想:
如果这个数字是val值,那么就把后面的元素移动到前面来,需要注意的是,此时需要
i--
,移动元素后,后面的元素需要重新判断
移动数据后,数组有效的长度缩短,末尾废弃的元素不应该进入 首层循环,如
nums=[0,1,2,2,3,0,4],
val=2
首次清除 第一个2后数组为:
nums=[0,1,2,3,0,4,4] k=6
很明显末尾的4不应该进入最外层的循环进行判断
需要舍弃
最后返回k的值