[Leetcode]-Contains Duplicate HashTbale重解
2015-07-07 21:54
447 查看
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
题目:输入int型数组,检测其中是否有重复的元素,如果有重复的元素则反复true,否则返回false
解法一:暴力求解,两层for循环,1600ms
解法二:hashTable解法16ms
Hide Tags: Array, Hash Table
题目:输入int型数组,检测其中是否有重复的元素,如果有重复的元素则反复true,否则返回false
解法一:暴力求解,两层for循环,1600ms
//暴力求解 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; }
解法二:hashTable解法16ms
#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); }
相关文章推荐
- Available Bandwidth paper(3)
- Contains Duplicate II
- 【LeetCode】219. Contains Duplicate II
- Contains Duplicate II
- 实战weblogic集群之创建domain,AdminServer
- Contains Duplicate
- INSTALL_PARSE_FAILED_NO_CERTIFICATES 解决办法
- 【LeetCode】217. Contains Duplicate (2 solutions)
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决办法
- 进程控制 [fork() exec() wait() waitpid()]
- AIX Study之--AIX网卡配置管理(ent0、en0、et0)
- Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or d.......
- Main.storyboard
- AIX Study之--AIX网卡配置管理(ent0、en0、et0)
- 关于[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]找不到指定文件的解决办法
- LeetCode Container With Most Water
- WSAIoctl
- AIX Study之--用户访问系统资源限制配置
- AIX Study之--AIX用户资源访问限制配置
- Grails边做边学入门篇[0]--------讲讲什么是Grails