移除元素 深刻理解移除的内部原理

首先,想举个例子。

比如来说如果我们在早餐店排队,中途如果谁尿急或者有事先走,他就先出去了吧,后面的人自动补位,以维持排队秩序。    在数据结构中则不然,删除并不是真正意义上的抹杀掉,而是后面的一项覆盖掉前一项,这才是移除元素的意义。

步入正题来说,数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。

27. 移除元素 - 力扣(LeetCode)

题目如上

两个解法 暴力和快慢指针法 我用两篇来写,为了说清楚(主要是为了有个鋗,今天写两篇就能拿到)

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用来确认和搜索目标数据的.

猜你喜欢

转载自blog.csdn.net/weixin_61847358/article/details/135312024