###### HubertXia

never give up, keep fighting.

###### [Leetcode]-Contains Duplicate HashTbale重解

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

Hide Tags： Array， Hash Table

//暴力求解
bool containsDuplicate(int* nums, int numsSize) {
int i = 0,j=0;
for(i=0;i<numsSize;i++)
{
for(j=i+1;j<numsSize;j++)
if(nums[i] == nums[j])
return true;
}
return false;
}

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
//hashtable
typedef int ElementType;

//hashtable
typedef unsigned int index1;
typedef struct listnode* position;
typedef struct listnode* list;
struct listnode{
ElementType data;
position next;
};

typedef struct hashtbl*  hashtable;
struct hashtbl {
int tablesize;
list *thelists;
};

index1 HashFunc(const ElementType key,int tablesize)
{
//unsigned int hashval = 0;
//while(*key != '\0')
//hashval = (hashval << 5) + *key++;
//return hashval % tablesize;

int index = key % tablesize;
return  index = index >= 0? index: index+tablesize;
}

hashtable InitializeHashTable(int tablesize)
{
hashtable H;
H = (hashtable)malloc(sizeof(hashtable));
if(NULL == H) return NULL;

H->tablesize = tablesize;

H->thelists = (list*)malloc(sizeof(list) * H->tablesize);
int i = 0;
for(i=0;i<H->tablesize;i++)//有表头
{
H->thelists[i] = (list)malloc(sizeof(struct listnode));
H->thelists[i]->next = NULL;
}
return H;
}
void DeleteHashTable(hashtable H)
{
position P,tem;
int i = 0;
for(i=0;i<H->tablesize;i++)
{
P = H->thelists[i]->next;
while(P != NULL)
{
tem = P;
free(tem);
P=P->next;
}
}
free(H->thelists);
free(H);
}
position Find(ElementType key,hashtable H)
{
position P;
list L;
L = H->thelists[ HashFunc( key, H->tablesize) ];
P = L->next;
while(P != NULL && P->data != key)
P = P->next;

return P;
}

bool Insert(ElementType key,hashtable H)
{
position pos,newnode;
list L;
pos = Find(key,H);
if(pos == NULL)
{
newnode = (position)malloc(sizeof(position));
L = H->thelists[ HashFunc( key, H->tablesize) ];
newnode->data = key;
newnode->next = L->next;
L->next = newnode;
}
else
return true;
}
void PrintHashTable(hashtable H)
{
position P;
int i = 0;
for(i=0;i<H->tablesize;i++)
{
P = H->thelists[i]->next;
printf("H->thelists[%d] = ",i);
while(P != NULL)
{
printf(" %d ->",P->data);
P=P->next;
}
printf("NULL\n");
}
}

bool containsDuplicate(int* nums, int numsSize) {
hashtable H;
int tablesize  = numsSize * 2;
H = InitializeHashTable(tablesize);
int i = 0;
for(i=0; i< numsSize; i++){
position pos,newnode;
list L;
pos = Find(nums[i],H);
if(pos == NULL)
{
newnode = (position)malloc(sizeof(position));
L = H->thelists[ HashFunc( nums[i], H->tablesize) ];
newnode->data = nums[i];
newnode->next = L->next;
L->next = newnode;
}
else
return true;
}
return false;
}

int main()
{
int nums[5] = {1,0,34,56,57};
bool r = containsDuplicate(nums,5);
printf("containsDuplicate is : %d \n",r);
}

#### leetcode 220: Contains Duplicate III

2015-06-02 08:31:05

#### leetcode 219: Contains Duplicate II

2015-05-29 15:02:09

#### LeetCode 217:Contains Duplicate

2015-05-31 18:37:10

#### leetcode 217: Contains Duplicate

2015-06-05 08:27:02

#### LeetCode 217. Contains Duplicate（C++版）

2017-03-31 11:16:32

#### Leetcode 220. Contains Duplicate III

2017-02-10 14:08:46

#### Leetcode 220 Contains Duplicate III

2015-06-24 19:38:02

#### [leetcode] 220. Contains Duplicate III 解题报告

2016-01-30 11:09:05

#### leetcode 217 Contains Duplicate 数组中是否有重复的数字

2015-08-09 21:48:10

#### leetcode_c++：Contains Duplicate II(219)

2016-06-18 13:33:40

## 不良信息举报

[Leetcode]-Contains Duplicate HashTbale重解