您的位置:首页 > 其它

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

2016-05-31 20:10 323 查看

题目

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

您在真实的面试中是否遇到过这个题?

Yes

样例

给出数组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++代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: