26. Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only once 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 of nums being 1
and 2
respectively. It doesn't matter what you leave beyond the new length.
题目大意:
在不申请其他空间的前提下删除一个有序数列里重复的元素。返回最终数组的长度。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class
Solution {
public
:
int
removeDuplicates(vector<
int
>& nums) {
if
(nums.empty() || nums.size() == 1)
return
nums.size();
int
cur = nums[0];
int
i = 0;
while
(i != nums.size() - 1 )
{
if
(cur == nums[i+1])
{
nums.erase(nums.begin() + i + 1);
}
else
{
cur = nums[i+1];
i++;
}
}
return
nums.size();
}
};
|
如果不需要删除元素,只是统计最后的个数。则可以采用下面这个简洁的做法:
参考自:https://discuss.leetcode.com/topic/8907/share-my-clean-c-code
1
2
3
4
5
6
|
int
count = 0;
for
(
int
i = 1; i < n; i++){
if
(A[i] == A[i - 1]) count++;
else
A[i - count] = A[i];
}
return
n - count;
|
其他思路:
(使用了额外的空间,本题不适用)将数组元素放入map中,然后输出map的大小
本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1836874