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

首先,想举个例子。

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

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

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

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值