leetcode 26 Remove Duplicates from Sorted Array

本文提供了一种在原地且使用常数内存的方式去除已排序数组中重复元素的方法,并给出了C++及Python的实现代码。该方法通过遍历数组并仅保留不重复的元素来工作,最终返回不含重复项的新数组长度。


Remove Duplicates from Sorted ArrayTotal Accepted: 66627 Total Submissions: 212739 My Submissions

                     

Given a sorted array, remove the duplicates in place such that each element appear onlyonce and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example,
Given input array nums = [1,1,2],

Your function should return length = 2, with the first two elements ofnums being 1 and 2 respectively. It doesn't matter what you leave beyond the new length



64ms好像有点慢了,这个方法有点讨巧了,绕过了算法的部分,以后还是少写这样的代码,多练习算法

我的解决方案:

class Solution {
public:
    int removeDuplicates(vector<int>& nums)
    {
        set<int> result;
        for(int i = 0;i< nums.size();i++)
        {
            result.insert(nums[i]);
        }
        nums.clear();
        set<int>::iterator iter = result.begin();
        for(;iter!=result.end();iter++)
        {
            nums.push_back(*iter);
        }
        return nums.size();
    }
};



class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int start=1,N = nums.size();
        if(N<=1) return N;
        for(int i=1;i<nums.size();i++) {
            if(nums[i]!=nums[i-1]){
                nums[start]=nums[i];
                start++;
            }
        }
        return start;
    }
};


一行代码的STL:

class Solution { public: int removeDuplicates(int A[], int n) { return distance(A, unique(A, A+n)); } };


int removeDuplicates(vector<int>& nums) {
    if(nums.size() <= 1) return nums.size();

    vector<int>::iterator it1,it2;
    for(it1=nums.begin(),it2=nums.begin()+1; it2 != nums.end();) {
        if(*it2 == *it1) it2=nums.erase(it2);
        else {it1++;it2++;}
    }

    return nums.size();
}   

python解决方案:

class Solution:
    # @param a list of integers
    # @return an integer
    def removeDuplicates(self, A):
        if not A:
            return 0

        newTail = 0

        for i in range(1, len(A)):
            if A[i] != A[newTail]:
                newTail += 1
                A[newTail] = A[i]

        return newTail + 1





转载于:https://www.cnblogs.com/wangyaning/p/7853957.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值