ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode_645. 错误的集合

2022-03-03 23:32:14  阅读:160  来源: 互联网

标签:numsSize hash struct nums int 645 key 集合 leetcode


集合 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 }

 

标签:numsSize,hash,struct,nums,int,645,key,集合,leetcode
来源: https://www.cnblogs.com/mhq-martin/p/15962457.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有