[leetcode] 80.Remove Duplicates from Sorted Array II

来源:互联网 发布:多益网络搬迁后新地址 编辑:程序博客网 时间:2024/06/06 03:17

题目:
Follow up for “Remove Duplicates”:
What if duplicates are allowed at most twice?

For example,
Given sorted array nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn’t matter what you leave beyond the new length.
题意:
这道题是在数组中删除重复元素,不过这个重复的意思是元素出现的次数超过了两次,两次及以内可以保存,比如1,1,1,2,2,3,只有1出现了3次,所以需要去掉一个,2只出现了两次所以不需要删除,直接保留,最终的结果是1,1,2,2,3,所以返回数组的长度是5.
思路:
需要三个指针,一个是扫描的当前指针front,一个是与该front不相等元素的指针,还有一个指针store指向的是下一个用来存放元素的位置。
front指向当前元素,tail指向第一个与front不同的元素,如果tail-front == 1,那么只需要将nums[store] = nums[front],front++;否则只保留两个front的元素,即让nums[store] = nums[store +1]= nums[front],front += 2,front+2的位置保留tail所指元素。
代码如下:

class Solution {public:    int removeDuplicates(vector<int>& nums) {        if(nums.size() <= 2)return nums.size();        int front = 0,tail = 0,store = 0;        while(tail < nums.size()){            while(tail < nums.size() && nums[tail] == nums[front])tail++;            switch(tail - front){                case 1:{                    nums[store] = nums[front];                    store++;                    break;                }                default:{                    nums[store] = nums[store + 1] = nums[front];                    store += 2;                    break;                }            }            front = tail;        }        return store;    }};
0 0
原创粉丝点击