您的位置:首页 > 编程语言 > C语言/C++

[C语言][LeetCode][442]Find All Duplicates in an Array

2016-12-12 10:48 579 查看

题目

Find All Duplicates in an Array

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.

Find all the elements that appear twice in this array.

Could you do it without extra space and in O(n) runtime?

Example:

Input:

[4,3,2,7,8,2,3,1]

Output:

[2,3]

标签

Array

难度

中等

分析

题目意思是给定一个整形数组,1<=a[i]<=n,n为数组的大小,数组的数字有可能出现两次或者一次,找到里面出现两次的数字。

解题思路是,遍历数组每个数字,把数字对应的数组下标所对应的数字,置为负数,然后再判断通过置负数的标志,来统计重复两次的数字。比如[4,3,2,7,8,2,3,1],输出如下



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 * ret = (int *)malloc(sizeof(int));
int i=0, j=0, index=0;

for(i=0; i<numsSize; i++)
{
index = abs(nums[i]) - 1;

//printf("nums[%d]:%2d     index:%2d        nums[index-1]:%2d\n", i, nums[i], index, nums[index]);
if(nums[index] < 0)
{
ret[ j++] = abs(nums[i]);
ret = (int *)realloc(ret, (j+1)*sizeof(int));

*returnSize = j;
}
else
nums[index] = -nums[index];
}

return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 leetcode