首先,想举个例子。
比如来说如果我们在早餐店排队,中途如果谁尿急或者有事先走,他就先出去了吧,后面的人自动补位,以维持排队秩序。 在数据结构中则不然,删除并不是真正意义上的抹杀掉,而是后面的一项覆盖掉前一项,这才是移除元素的意义。
步入正题来说,数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
题目如上
两个解法 暴力和快慢指针法 我用两篇来写,为了说清楚(主要是为了有个鋗,今天写两篇就能拿到)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size=nums.size();
for(int i=0;i<size;i++){
if(nums[i]==val){//找到目标元素后
for(j=i+1;j<size;j++){
nums[j-1]=nums[j];//目标元素的后续元素进行覆盖
}
i--;//因为i后的元素都向前移动了一位,i也向前
size--;//此时数组的长度-1
}
}
return size;
}
};
此时为暴力方法,双层循环,外面的for模拟指针遍历的,里面的for用来确认和搜索目标数据的.