leetcode-数组中数字出现的次数

题目

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

思路

1: 位运算,但是不具有一般性,如果把题目改一改就不行了
2: 哈希表,具有一般性,可以查看出现任意次数的数字,但是牺牲了空间,这里题目给出2<nums<10000,所以要在堆上分一个10000的数组,对于原始数组每一个数字,都以数字大小为哈希表下标的形式映射过去,没出现一次,哈希表对应+1。

 #define MAX_VALUES 10001
int* singleNumbers(int* nums, int numsSize, int* returnSize){
    int* arr=(int*) calloc(sizeof(int) , MAX_VALUES);
    for(int i=0;i<numsSize;i++){
        arr[ nums[i] ]++;
    }
    int *new_arr=malloc(sizeof(int)*2);
    int k=0;
    for(int i=0;i<MAX_VALUES;i++){
        if(arr[i]==1)
            new_arr[k++]=i;
    }
    *returnSize=2;
    return new_arr;
}
发布了19 篇原创文章 · 获赞 1 · 访问量 3122

猜你喜欢

转载自blog.csdn.net/qq_41603639/article/details/104927966