leetcode 26 Remove Duplicates from Sorted Array(在有序数组中删除重复元素)

题目要求:

给定排好顺序的数组,在数组内删除重复项,使每个元素只出现一次并返回不含重复项数组的长度
不要为另一个数组分配额外的空间,保持空间复杂度是O(1)。

Example

输入 [1,1,2] 输出:2
输入 [0,0,1,1,1,2,2,3,3,4] 输出:5

解题思路

对一个排好顺序的数组,我们只需要比较相邻的两个元素是否相同即可判断数组是否含有重复项。
在这里,为了方便,我们采用双指针法
用一个指针来从前到后对数组进行遍历,另一个指针来记录非重复元素的索引(通过当前遍历元素和下一个元素判断是否重复)。
需要注意的是数组为空的情况不要忘记。代码如下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
         if(nums.size()==0) return 0; // 数组为空
         int record = 0; // 第一个指针记录非重复
         for(int traverse = 1; traverse < nums.size(); traverse++)
        {
             // 判断当前元素是否重复
             // if(nums[traverse] != nums[record]) is also true. 
            if(nums[traverse] != nums[traverse - 1]) 
                nums[++record] = nums[traverse]; // 记录非重复元素,并且将记录指针向后移动。
        } 
         return record + 1;
    }
};
class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        record = 0 # 记录非重复元素的位置
        for i in range(1,len(nums)):
            if nums[i] != nums[i-1]:
                record= record + 1  # 发现不重复的位置,更新记录 不然[1,1,2]以就会变成[2,1]
                nums[record] = nums[i]
        return record + 1

原题链接:https://leetcode.com/problems/remove-duplicates-from-sorted-array/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值