社团活动每日一题:第六天 删除有序数组中的重复项

本文介绍了如何运用快慢指针解决LeetCode上的‘删除排序数组中的重复项’问题。作者详细解释了快慢指针的概念,并提供了AC代码。代码中,两个指针从数组首项开始,若值不同则移动慢指针并更新值,最终返回慢指针的下一个位置作为结果。此外,文章提到,如果不限制空间复杂度,可以使用集合或映射库来解决此问题,而对于无序数组,可以先排序再处理。
摘要由CSDN通过智能技术生成

 前言:这是我们大学社团给我们大一新生布置的每日一题任务,因为本人编程理解有限,参考价值较低。

题目链接icon-default.png?t=L9C2https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/        这是一道有序数组的问题,理论上用快慢指针的方法搞定。先说一下,这里的指针不是许多人学C语言入门到入土的那个指针,就是个记录数组下表的东西。因为题目上明确提出是有序数组,所以重复项都是紧挨着的,这个时候可以用这个方法来做。

        现在来解释一下什么是快慢指针,事实上我看到这道题的题解里有视频教程,但我还是说一下吧:两个指针从第一项也就是nums[0]开始向右遍历,如果第一个指针和第二个指针的值相同,则第一个指针向右移动一格,第二个指针不变;如果两指针值不相同,第二个指针向右移动一格并将这个格里的数字改变为第一个指针所指向的值,然后再如此反复知道第一个指针遍历结束。我们不难看出第二个指针永远在第一个指针的后面,所以我们称它们叫快慢指针。

        下面是我的AC代码:

class Solution {
	int fast,low,L;
public:
    int removeDuplicates(vector<int>& nums) {
		L = nums.size();
		if(!L){
			return 0;           //需要排除L==0的情况
		}
		for(;fast<L;fast++){    //fast已经定义过了
			if(nums[fast]!=nums[low])nums[++low]=nums[fast];
		}
		return low+1;           //我们low指向的是第low+1个元素
    }
};

        当然如果这道题目没有提出O(1)的空间复杂度要求,我们或许能用<set>库或者<map>库解决这道题;如果题目中是无序数组,我们还可以用<algorithm>库中的sort()函数给他排个序。我们应当尝试一下其他的费时(时间复杂度)费力(空间复杂度)费脑子(代码复杂度)的方法,这样才可以在遇到做不出来的题目时用这些小方法去到更多的分,毕竟:

骗分过样例,暴力出奇迹。暴搜挂着机,打表出省一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值