26. Remove Duplicates from Sorted Array

题目链接
tag:

  • Easy;
  • Two Pointer;

question
  Given a sorted array nums, 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 by modifying the input array in-place with O(1) extra memory.

Example 1:

Given 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 returned length.

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],
Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.
It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);
// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
print(nums[i]);
}

思路:
  这道题要我们从有序数组中去除重复项。那么这道题的解题思路是,我们使用快慢指针来记录遍历的坐标,最开始时两个指针都指向第一个数字,如果两个指针指的数字相同,则快指针向前走一步,如果不同,则两个指针都向前走一步,这样当快指针走完整个数组后,慢指针当前的坐标加1就是数组中不同数字的个数,代码如下:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.empty()) return 0;
        int slow = 0, fast = 0, n = nums.size();
        while (fast < n) {
            if (nums[slow] == nums[fast]) ++fast;
            else nums[++slow] = nums[fast++];
        }
        return slow+1;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 几乎每天晚上我都会念叨着,“我到底写什么呀?”这不今晚我又开始了我的絮絮叨叨,妈妈在边上说道:“可以...
    菲儿1225阅读 377评论 6 11
  • 爱情就应该单纯的像小孩,淳朴的像自然!如此,就好!
    可爱的小胖颖阅读 130评论 0 0
  • 感恩下班时发型师等我并送我回家,感恩洗完头发型师给我吹出漂亮的发型。 目标:2018.7.31号前额外收入10w ...
    jessie娟子阅读 182评论 0 0