The size of the hash table is not determinate at the very beginning. If the total size of keys is too large (e.g. size >= capacity / 10), we should double the size of the hash table and rehash every keys. Say you have a hash table looks like below:
size=3
, capacity=4
[null, 21, 14, null]
↓ ↓
9 null
↓
null
The hash function is:
int hashcode(int key, int capacity) {
return key % capacity;
}
here we have three numbers, 9, 14 and 21, where 21 and 9 share the same position as they all have the same hashcode 1 (21 % 4 = 9 % 4 = 1). We store them in the hash table by linked list.
rehashing this hash table, double the capacity, you will get:
size=3
, capacity=8
index: 0 1 2 3 4 5 6 7
hash : [null, 9, null, null, null, 21, 14, null]
Given the original hash table, return the new hash table after rehashing .
rehash意思是重hash, 即原来的key的数目太高,需要将hash table的大小扩大二倍,然后重新获得key值.
了解概念的题目.
代码如下:
""" Definition of ListNode class ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next """ class Solution: """ @param hashTable: A list of The first node of linked list @return: A list of The first node of linked list which have twice size """ def rehashing(self, hashTable): if not hashTable: return [] capacity = len(hashTable)*2 rehash = [None]*capacity #insert on the head of linked list for i in xrange(len(hashTable)): cur = hashTable[i] while cur: key = cur.val%capacity if not rehash[key]: rehash[key] = ListNode(cur.val) else: tmp = rehash[key] while tmp.next: tmp = tmp.next tmp.next = ListNode(cur.val) cur = cur.next return rehash