移除数字
题目力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
(1)一位师兄的题解
int removeElement(int* nums, int numsSize, int val) {
{
int j = 0;
for(int i = 0; i < numsSize; i ++){
if(nums[i] != val){
nums[j ++] = nums[i];
}
}
return j;
}
}
(2)循环遍历数组,之后将每遇到和val相等的元素,则将val放置与数组最后的一个元素交换
并使用一个j交换的次数,即val的个数
但是这个代码这样写对吗?显然不对,如果第一个元素和最后一个元素相等,if只会判断一次
交换后显然跳过了该元素的删除,如2,3,3,2,设val=2,则最后得到的是2,3,3。numsize为数组长度,减一既忽略最后一个值的大小,变相看作删除了一个数。因此需要用while循环替代即可。
正确代码如下
while循环内为什么要加numsize