且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

leetCode 26. Remove Duplicates from Sorted Array 数组

更新时间:2022-10-03 13:49:03

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