LeetCode 442. 数组中重复的数据(C、C++、python)

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次

找到所有出现两次的元素。

你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?

示例:

输入:
[4,3,2,7,8,2,3,1]

输出:
[2,3]

C

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* findDuplicates(int* nums, int numsSize, int* returnSize) 
{
    int n=numsSize;
    int* res=(int*)malloc(sizeof(int)*n);
    int k=0;
    for(int i=0;i<n;i++)
    {
        int index=abs(nums[i])-1;
        if(nums[index]>0)
        {
            nums[index]=-nums[index];
        }
        else
        {
            res[k++]=abs(nums[i]);
        }
    }
    *returnSize=k;
    return res;
}

C++

class Solution {
public:
    vector<int> findDuplicates(vector<int>& nums) 
    {
        vector<int> res;
        int n=nums.size();
        for(int i=0;i<n;i++)
        {
            int index=abs(nums[i])-1;
            if(nums[index]>0)
            {
                nums[index]=-nums[index];
            }
            else
            {
                res.push_back(abs(nums[i]));
            }
        }
        return res;
    }
};

python

class Solution:
    def findDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        res=[]
        n=len(nums)
        for i in range(n):
            index=abs(nums[i])-1
            if nums[index]>0:
                nums[index]=-nums[index]
            else:
                res.append(abs(nums[i]))
        return res

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/84027394
今日推荐