美文网首页面试算法
线性表-Remove Duplicates from Sorte

线性表-Remove Duplicates from Sorte

作者: wenyilab | 来源:发表于2018-10-09 16:33 被阅读148次

    描述
    Follow up for ”Remove Duplicates”: What if duplicates are allowed at most twice?
    For example, Given sorted array A = [1,1,1,2,2,3],
    Your function should return length = 5, and A is now [1,1,2,2,3]
    思路:
    这道题是上一篇的升级版,允许最多有两个重复的数字,与上一篇思路基本一致,额外一个变量来记录次数,注意index的初值以及判断数值不等时的改变,如果是未排序的数组则需要引入一个hashmap来记录出现的次数。

    代码1 python
    class Solution:
        def removeDuplicates(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            if len(nums) < 3:
                return len(nums)
            index = 2
            for i in range(len(nums) - 2):
                if nums[index - 2] != nums[i+2]:
                    nums[index] = nums[i+2]
                    index += 1        
            return index
    
    代码2 c++
    class Solution:
    public:
        int removeDuplicates(vector <int>& nums){
            if (nums.size() <= 2) return nums.size();
            int index = 2;
            for (int i = 2 ; i < nums.size(); i++){
                if(nums[index - 2] != nums[i])
                    nums[index++] = nums[i]; 
            }
            return index;
        }
    

    下面再提供一种思路,自行理解

    代码3 c++
    class Solution:
    public:
        int removeDuplicates(vector <int>& nums){
            int n = nums.size();        
            int index = 0;
            for (int i = 0 ; i < n; ++i){
                if( i >0 && i < n - 1 && nums[i] == nums[i - 1] && nums[i] == nums[i +1])
                    continue;
                nums[index++] = nums[i]; 
            }
            return index;
        }

    相关文章

      网友评论

        本文标题:线性表-Remove Duplicates from Sorte

        本文链接:https://www.haomeiwen.com/subject/umxyaftx.html