将“ n”个锁与“ n”个键匹配

时间:2018-08-29 10:04:56

标签: arrays algorithm

有n个外观相同的锁和n个不同的键。每个锁只能用给定钥匙中的一个打开。匹配每个锁键对。

我已经用蛮力方法O(n ^ 2)解决了这个问题,但是我想知道是否有解决这个问题的有效方法。

1 个答案:

答案 0 :(得分:-2)

请检查是否有帮助-

1) 快速排序方式Θ(nlogn):可以应用快速排序技术进行求解。

为了理解逻辑,可以将问题简化为螺母和螺栓。

//选择枢轴(可以是最后一个元素或任何元素)进行分区。             ivot =分区(锁,低,高,keys_pivot);

        // Now use returned pivot to partition keys - 
        // As key/lock should be at same index
        partition(keys, low, high, locks_pivot[pivot]);

        matchPairs(keys, locks, low, pivot-1);
        matchPairs(keys, locks, pivot+1, high);

例如, https://www.geeksforgeeks.org/nuts-bolts-problem-lock-key-problem/

2)哈希函数O(n):

 Add all locks to HashMap<> / plain array
 Iterate over keys to find a matching pair

例如, https://www.geeksforgeeks.org/nuts-bolts-problem-lock-key-problem-set-2-hashmap/