首页 > 试题广场 >

数组中只出现一次的两个数字

[编程题]数组中只出现一次的两个数字
  • 热度指数:119719 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

数据范围:数组长度 ,数组中每个数的大小
要求:空间复杂度 ,时间复杂度

提示:输出时按非降序排列。
示例1

输入

[1,4,1,6]

输出

[4,6]

说明

返回的结果中较小的数排在前面     
示例2

输入

[1,2,3,3,2,9]

输出

[1,9]
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2) {
    return (*(int*)e1 - * (int*)e2);
}

int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize ) {
    qsort(nums, numsLen, sizeof(nums[0]), cmp_int);

    for (int i = 1; i < numsLen; i++) {
        if (nums[i] == nums[i - 1]) {
            if (nums[i] == nums[i - 1] == 0)continue;
            nums[i] = nums[i - 1] = 0;
        }
    }

    int* p = (int*)malloc(sizeof(nums[0]) * numsLen);
    int k = 0;
    for (int i = 0; i < numsLen; i++) {
        if (nums[i] != 0) {
            p[k++] = nums[i];
        }
    }

    *returnSize = k;

    return p;
}

发表于 2024-09-08 17:11:09 回复(0)
/**(直接两个for循环)打完收工
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @param numsLen int nums数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
 int b[2];
 int j=0;
int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize ) {
    // write code here
    for (int i=0; i<numsLen; i++) {
        int count =0;
        for (int j=0; j<numsLen; j++) {
            if (nums[i]==nums[j])
            count++;
           
        }

    if (count==1)
    b[j++]=nums[i];
    }
    if (b[0]>b[1]) {
        int temp =b[0];
        b[0]=b[1];
        b[1]=temp;
    }
   *returnSize =2;
   return b;
   
   
}
发表于 2024-09-01 01:10:26 回复(0)
int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize ) {
    int HashTable[1000000] = {0}, i, j, *res;
    res = (int*)malloc(2*sizeof(int));
    for (i = 0; i < numsLen; i++)
        HashTable[nums[i]]++;

    for (i = 0, j = 0; i < sizeof(HashTable); i++) {
        if (HashTable[i] == 1)
            res[j++] = i;
        if(j>=2)
            break;
    }
    *returnSize = 2;
    return res;
}

编辑于 2024-03-20 21:42:40 回复(0)
int a[2];

int* FindNumsAppearOnce(int* array, int arrayLen, int* returnSize ) {
    // write code here
    *returnSize = 2;
    int i,j = 0;
    int b[1000001];

    for (i = 0; i < arrayLen; i++){
        b[array[i]]++;
    }

    for (i = 0; i < 1000001; i++){
        if (b[i] == 1) a[j++] = i;
    }
    
    return a;
}

发表于 2023-03-17 19:21:52 回复(0)
intFindNumsAppearOnce(intarrayint arrayLenintreturnSize ) {
    // write code here
    int *temp=(int *)malloc(2*sizeof(int));
    int k=0;
    int hash[1000001];
    for(int i=0; i<1000001; i++){
        hash[i]=0;
    }
    for(int i=0; i<arrayLen; i++){
        hash[array[i]]++;
    }
    for(int i=0; i<1000001; i++){
        if(hash[i]==1)
        temp[k++]=i;
    }
    *returnSize=2;
    return temp;
}
发表于 2022-09-23 15:46:20 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @param arrayLen int array数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int* FindNumsAppearOnce(int* array, int arrayLen, int* returnSize ) {
    // write code here
    /* 冒泡排序 */
    int *result = malloc(8);
    *returnSize = 2;
for (int i = 0; i < arrayLen; i++)
{
    for (int j = 0; j < arrayLen -  i - 1; j++)
        {
            if (array[j] > array[j + 1])
               {
                    int temp;
                    temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
         }
}
    for(int i = 0; i < arrayLen; i++)
    {
        if(array[i]==array[i+1])
        {
            i++;
            continue;
        }
        if(array[i]!=array[i+1])
        {
            *result = array[i];
            if(array[i+1]!=array[i+2])
            {
                *(result+1) = array[i+1];
            }
            else
                *(result+1) = array[i+3];
            return result;
        } 
    }
    return 0;
}
发表于 2022-05-18 12:41:36 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @param arrayLen int array数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int* FindNumsAppearOnce(int* array, int arrayLen, int* returnSize ) {
    // write code here
    int a[1000000];
    int i,k=0;
    for(i=0;i<arrayLen;i++)
    {
      a[array[i]]++;
    }
    for(int j=0;j<1000000;j++)
    {
        if(a[j]==1)
        {
            a[k]=j;
            k++;
        }
    }
    for(int j=0;j<k;j++)
    {
    for(int j1=0;j1<k-1;j1++)
    {
        if(a[j1]>a[j1+1])
        {
         int temp;
         temp=a[j1];
            a[j1]=a[j1+1];
            a[j1+1]=temp;
            }
    }
        }
    int* re=(int*)malloc(sizeof(int)*2);
    re[0]=a[0];
    re[1]=a[1];
    *returnSize=2;
        return re;
}

发表于 2022-04-26 22:31:45 回复(0)

问题信息

上传者:牛客301499号
难度:
7条回答 6297浏览

热门推荐

通过挑战的用户

查看代码
数组中只出现一次的两个数字