C/C++教程

leetcode_645. 错误的集合

本文主要是介绍leetcode_645. 错误的集合,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。

给定一个数组 nums 代表了集合 S 发生错误后的结果。

请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

 

示例 1:

输入:nums = [1,2,2,4]
输出:[2,3]
示例 2:

输入:nums = [1,1]
输出:[1,2]

 

哈希表

 1 /**
 2  * Note: The returned array must be malloced, assume caller calls free().
 3  */
 4 int* findErrorNums(int* nums, int numsSize, int* returnSize){
 5     int *hash = (int *)malloc(sizeof(int) * (numsSize + 1));
 6     memset(hash, 0, sizeof(int) * (numsSize + 1));
 7 
 8     *returnSize = 2;
 9     int *res = (int *)malloc(sizeof(int) * 2);
10     for(int i = 0; i < numsSize; i++) {
11         hash[nums[i]]++;
12     }
13     for(int i = 1; i < numsSize + 1; i++) {
14         if(hash[i] == 2) {
15             res[0] = i;
16         }else if(hash[i] == 0) {
17             res[1] = i;
18         }
19     }
20     return res;
21 }

ut_hash

 1 struct my_struct{
 2     int key;
 3     int val;
 4     UT_hash_handle hh;
 5 };
 6 
 7 struct my_struct *users  = NULL;
 8 
 9 void add_user(int keyid) {
10     struct my_struct *s;
11     HASH_FIND_INT(users, &keyid, s);
12     if(s == NULL) {
13         s = (struct my_struct *)malloc(sizeof(struct my_struct));
14         s->key = keyid;
15         s->val = 1;
16         ////HASH_ADD_INT第二个参数传入是结构体定义key字段名称
17         HASH_ADD_INT(users, key, s);
18     } else {
19         s->val++;
20         //HASH_ADD_INT(users, key, s);     这里不用重新 add 
21     }
22 }
23 
24 int find_user(int keyid) {
25     struct my_struct *s;
26     HASH_FIND_INT(users, &keyid, s);
27     if(s == NULL){
28         return 0;
29     }else if(s->val == 2) {
30         return 2;
31     }
32     return 1;
33 }
34 
35 
36 int* findErrorNums(int* nums, int numsSize, int* returnSize){
37     users = NULL;
38     *returnSize = 2;
39     int *res = (int *)calloc(2, sizeof(int));
40 
41     //存哈希表
42     for(int i = 0; i < numsSize; i++) {
43         add_user(nums[i]);
44     }
45 
46     //遍历哈希表里面的值 , 从 1 -》 numsSize , 找出 key id 没有的 和 val ==2 的值
47     for(int i = 1; i <= numsSize; i++) {
48         if(find_user(i) == 2) {
49             res[0] = i;
50         }
51         if(find_user(i) == 0) {
52             res[1] = i;
53         }
54     }
55     return res;
56 }

 

这篇关于leetcode_645. 错误的集合的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!