有n个外观相同的锁和n个不同的键。每个锁只能用给定钥匙中的一个打开。匹配每个锁键对。
我已经用蛮力方法O(n ^ 2)解决了这个问题,但是我想知道是否有解决这个问题的有效方法。
答案 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/