给定两个长度不同的未排序数组A和Q。对于Q中的每个元素,找到一个在A中具有最小差异的元素。
int[] findSmallestDifference(int A[], int Q[]){
int []result = new int[Q.length];
// insert code to find difference for each Q
return result;
}
我在一次面试中遇到了这个问题,我提供了几种解决方案,但是被指出还不够优化。
我提供的解决方案如下:
1. 暴力法:对于每个A,对于每个Q计算差异,时间复杂度为O(A * Q)。 2. 对数组A进行排序,对于每个Q元素,执行二分查找以找到最小差异,时间复杂度为O(AlogA + QlogA)。 3. 对数组A和Q进行排序,然后我们在每个数组上有两个指针来查找差异,时间复杂度为O(AlogA + QlogQ)。
有没有更优化的解决方案呢?