佛山网站优化平台,建立网站的想法,沧州做网站推广,免费百度网站建设问题#xff1a;
给你一个数组 nums 和一个值 val#xff0c;你需要 原地 移除所有数值等于 val 的元素#xff0c;并返回移除后数组的新长度。
要求#xff1a;
不要使用额外的数组空间#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改… 问题
给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素并返回移除后数组的新长度。
要求
不要使用额外的数组空间你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
OJ代码
int removeElement(int* nums, int numsSize, int val){int src0;
int des0;
while(srcnumsSize)
{if(nums[src]!val){nums[des]nums[src];}else{src;}
}
return des;
}
解析
srcdes是数组的两个下标。通过这两个下标的移动来给数组赋值。 假设输入的val是 2
while(srcnumsSize) 成立进入循环
nums[src] ! val 所以if 条件成立。执行语句 nums[des] nums[src];
也就是把nums[src] 的值赋值给 nums[des];
再进行加一操作。
它会判断现在的src 是否满足循环的条件如果小于numsSize 则继续进行
如果不满足条件就会退出循环。 现在nums[src] val 进行else 语句
src 就是 src 下标进行加一操作不进行赋值操作。
因为我们的目的就是移除 val 元素保持des下标不变最后要返回数组。 src加一后 nums[src] 就又不等于 val 了所以继续执行if 语句。
nums[src] 的值赋值给 nums[des];
所以现在 nums[src]的值就是 3
两个下标再进行加一操作。
它会判断现在的src 是否满足循环的条件如果小于numsSize 则继续进行
如果不满足条件就会退出循环。 现在 nums[src] 又等于 val 所以进行else 语句。
src 下标进行加一操作不进行赋值操作。 加一之后nums[src] 又还等于 val 所以还是进行else 语句。 此时 nums[src] 就不等于 val 了所以执行if 语句。
nums[src] 的值赋值给 nums[des];
所以nums[des] 的值就是 4 了。
两个下标再进行加一操作。 nums[src] 又不等于 val 了所以继续执行if 语句。
nums[src] 的值赋值给 nums[des];
所以现在 nums[src]的值就是 3
此时两个下标再进行加一操作
但是scr的值会超过numsSize所以会跳出循环。
然后 return des; 所以现在的数组就是移除val 值后的数组了。