leetCode 26. Remove Duplicates from Sorted Array 数组

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值