/*
Q: How would you find the Common elements from 2 Arrays which my or may not be of the same size?
*/
#include <iostream>
#include <string>
#include <vector>
class HashNode
{
public:
HashNode();
const char* key;
int value;
};
HashNode::HashNode()
{
key = "";
value = 0;
};
class HashTable
{
public:
HashTable();
int get(const char*);
void put(const char*);
private:
static const int size = 2023;
static const unsigned int seed = 131;
HashNode nodes[size];
};
HashTable::HashTable()
{
for(int i = 0; i < size; i++)
{
nodes[i] = HashNode();
}
};
int HashTable::get(const char* key)
{
unsigned int hash = 0;
for(int i = 0 ; i < strlen(key); i++)
{
hash = hash * seed + key[i];
}
hash %= size;
return nodes[hash].value;
};
void HashTable::put(const char* key)
{
unsigned int hash = 0;
for(int i = 0; i < strlen(key); i++)
{
hash = hash * seed + key[i];
}
hash %= size;
nodes[hash].value++;
};
int main()
{
std::vector<char*> v1;
v1.push_back("apple");
v1.push_back("babana");
v1.push_back("citi");
v1.push_back("oregon");
v1.push_back("cincinnati");
v1.push_back("oklahoma");
std::vector<char *> v2;
v2.push_back("cincinnati");
v2.push_back("olabama");
v2.push_back("apple");
v2.push_back("nyc");
HashTable* ht = new HashTable();
for(std::size_t i = 0; i < v1.size(); i++)
{
ht->put(v1[i]);
}
for(std::size_t i = 0; i < v2.size(); i++)
{
int v = ht->get(v2[i]);
if(v != 0)
{
printf("%s\n", v2[i]);
}
}
return 0;
}
Bloomberg 05102012 [2]
最新推荐文章于 2021-11-11 02:52:09 发布
本文介绍了一种算法,用于在两个不同大小的数组中找到公共元素,并使用哈希表来实现高效的查找过程。
1万+

被折叠的 条评论
为什么被折叠?



