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刷题:第二百一十七题 存在重复元素的主要内容,如果未能解决你的问题,请参考以下文章
第二百一十四节,jQuery EasyUI,Calendar(日历)组件
第二百一十八节,jQuery EasyUI,TimeSpinner(时间微调)组件