LintCode(100)删除排序数组中的重复数字

原创 2016年05月31日 20:10:37

题目

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

样例

给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]

分析

对排序数组去重,要求空间复杂度为O(1)
遍历一次数组,将不重复元素保留,重复元素被覆盖,最后删除末尾剩余的元素即可。

Python代码

#
#100 删除排序数组中的重复数字
#
class Solution:
    """
    @param A: a list of integers
    @return an integer
    """
    def removeDuplicates(self, A):
        # write your code here
        k=0
        for i in range(1,len(A)):
            if A[i] != A[k]:
                k+=1
                A[k] = A[i]
        
        del A[k+1:len(A)]
        return len(A)
        
          

GitHub -- Python代码


C++代码

/*
100 删除排序数组中的重复数字

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

您在真实的面试中是否遇到过这个题? Yes
样例
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
*/

class Solution {
public:
    /**
     * @param A: a list of integers
     * @return : return an integer
     */
    int removeDuplicates(vector<int> &nums) {
        // write your code here
        if(nums.empty())
        {
            return 0;
        }//if
        
        int n = nums.size(),k=0;
        
        for(int i=1;i<n;++i)
        {
            if(nums[i] != nums[k])
            {
                nums[++k] = nums[i];
            }//if
        }//for
        nums.resize(k+1);
        return k+1;
    }
};
GitHub -- C++代码



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

删除排序数组中的重复数字

题目描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 样例:给出数组A =[1,1,2...

容易 删除排序数组中的重复数字

Remove Duplicates from Sorted Array -- LeetCode 分类: LeetCode2014-02-27 05:12 4789人阅读 评论(5) 收藏 举...

删除排序数组中的重复数字——LintCode

删除排序数组中的重复数字 给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的...
  • fk5431
  • fk5431
  • 2015年12月10日 19:39
  • 950

LintCode 删除排序数组中的重复数字 II

删除排序数组中的重复数字 II跟进删除排序数组中的重复数字: 如果可以允许出现两次重复将如何处理? 样例 给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,...

给定一个数组,求数组中所有元素的可能组合(每个元素只出现一次),使其和等于给定数的解决办法

只求一个组合可以采用背包问题的思路,求所有组合的话,背包问题可能就不太适用了。这里面采用暴力搜索+剪枝,具体是先对给定的数组进行排序,在求解的深度优先搜索过程中,如果出现中间的求和结果大于预先给定的数...

删除排序数组中的重复元素(三种方法的比较)

题目描述:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。...

java__排序后的数组删除重复数字。给定升序排序的数组,如果数组有 22 个或 22 个以上相同的数字,去掉他们,直到剩下 22 个为止。

给定升序排序的数组,如果数组有 22 个或 22 个以上相同的数字,去掉他们,直到剩下 22 个为止。 例如: 数组 A[] = [1,1,1,2,2,3]A[]=[1,1,1,2,2,3] ...

去除已排序数组中的重复元素

题目描述 给定一个已排序的数组,去除数组中的重复元素,只保留一个重复的元素,并且返回新的数组长度。 要求: 不要给数组分配额外的空间,你必须使用常量的内存大小进行原地操作。 例如: 给出数组A=[...

算法:给定整数型数组,要求去除重复元素形成新数组,并返回新数组长度

/** * * @author VK * @Date 2016-12-19 10:48 * @Decribe 给定一个整数型一维数组,去除重复元素形成新数组, * 并返回新数组长度。不额外...

删除有序数组中重复出现的元素

一起来看看这道题吧: 这是取自LeetCode的一道题,题目大意是给你一个有序的数组,其中有些元素是重复的,且最多出现两次,现在让你写一个函数,把这个数组里重复的那些元素删除一个,留下一个,并返回新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LintCode(100)删除排序数组中的重复数字
举报原因:
原因补充:

(最多只允许输入30个字)