129.Rehashing-重哈希(中等题)

来源:互联网 发布:linux grub引导win7 编辑:程序博客网 时间:2024/05/18 20:05

重哈希

  1. 题目

    哈希表容量的大小在一开始是不确定的。如果哈希表存储的元素太多(如超过容量的十分之一),我们应该将哈希表容量扩大一倍,并将所有的哈希值重新安排。假设你有如下一哈希表:

    size=3, capacity=4
    这里写图片描述
    哈希函数为:

    int hashcode(int key, int capacity) {return key % capacity;}

    这里有三个数字9,14,21,其中21和9共享同一个位置因为它们有相同的哈希值1(21 % 4 = 9 % 4 = 1)。我们将它们存储在同一个链表中。
    重建哈希表,将容量扩大一倍,我们将会得到:

    size=3, capacity=8
    这里写图片描述
    给定一个哈希表,返回重哈希后的哈希表。

    注意事项
    哈希表中负整数的下标位置可以通过下列方式计算:
    C++/Java:如果你直接计算-4 % 3,你会得到-1,你可以应用函数:a % b = (a % b + b) % b得到一个非负整数。
    Python:你可以直接用-1 % 3,你可以自动得到2。

  2. 样例

    给出 [null, 21->9->null, 14->null, null]
    返回 [null, 9->null, null, null, null, 21->null, 14->null, null]

  3. 题解

/** * Definition for ListNode * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public 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     */        public ListNode[] rehashing(ListNode[] hashTable) {        ListNode[] reHashTable = new ListNode[hashTable.length * 2];        for (int i=0;i<hashTable.length;i++)        {            if (hashTable[i] != null)            {                ListNode node = hashTable[i];                while (node != null)                {                    int hc = (node.val % reHashTable.length + reHashTable.length) % reHashTable.length;                    if (reHashTable[hc] == null)                    {                        reHashTable[hc] = new ListNode(node.val);                    }                    else                    {                        ListNode dummy = reHashTable[hc];                        while (dummy.next != null)                        {                            dummy = dummy.next;                        }                        dummy.next = new ListNode(node.val);                    }                    node = node.next;                }            }        }        return reHashTable;    }};

Last Update 2016.10.13

0 0
原创粉丝点击