LeetCode刷题:第二百一十七题 存在重复元素

Posted lihanwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题:第二百一十七题 存在重复元素相关的知识,希望对你有一定的参考价值。

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例 1:

输入: [1,2,3,1]
输出: true

示例 2:

输入: [1,2,3,4]
输出: false

示例 3:

输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
哈希大法!
直接上代码
 1 typedef struct HashTable 
 2     int *data;
 3     int *flag;
 4     int size;
 5  HashTable;
 6 
 7 HashTable *init(int n) 
 8     HashTable *h = (HashTable *)malloc(sizeof(HashTable));
 9     h->data = (int *)malloc(sizeof(int) * n);
10     h->flag = (int *)calloc(sizeof(int), (n / 31 + 1));
11     h->size = n;
12     return h;
13 
14 
15 int hash(int val) 
16     return val & 0x7fffffff;
17 
18 
19 int check(HashTable *h, int ind) 
20     int x = ind / 31, y = ind % 31;
21     return h->flag[x] & (1 << y);
22 
23 
24 void set(HashTable *h, int ind, int val) 
25     int x = ind / 31, y = ind % 31;
26     h->flag[x] |= (1 << y);
27     h->data[ind] = val;
28     return ;
29 
30 
31 void insert(HashTable *h, int val) 
32     int ind = hash(val) % h->size;
33     int times = 1;
34     while (check(h, ind)) 
35         ind += (times * times);
36         ind %= h->size;
37     
38     set(h, ind, val);
39     return ;
40 
41 
42 int query(HashTable *h, int val) 
43     int ind = hash(val) % h->size;
44     int times = 1;
45     while (check(h, ind) && h->data[ind] != val) 
46         ind += (times * times);
47         ind %= h->size;
48     
49     return check(h, ind);
50 
51 
52 void clear(HashTable *h) 
53     if (h == NULL) return ;
54     free(h->data);
55     free(h->flag);
56     free(h);
57     return ;
58 
59 
60 bool containsDuplicate(int* nums, int numsSize)
61     HashTable *h = init(numsSize * 3);
62     for (int i = 0; i < numsSize; i++) 
63         if (query(h, nums[i])) 
64             clear(h);
65             return true;
66         
67         insert(h, nums[i]);
68     
69     clear(h);
70     return false;
71 

 

以上是关于LeetCode刷题:第二百一十七题 存在重复元素的主要内容,如果未能解决你的问题,请参考以下文章

leecode第二百八十七题(寻找重复数)

WPF效果第二百一十一篇之TreeView勾选

第二百一十四节,jQuery EasyUI,Calendar(日历)组件

第二百一十八节,jQuery EasyUI,TimeSpinner(时间微调)组件

第二百一十三节,jQuery EasyUI,NumberBox(数值输入框)组件

WPF效果第二百一十篇之NPOI插入图片