Javascript 我对最小差分算法问题的解决方案是否具有最佳时空复杂度(O(nLog(n)和#x2B;mLog(m))?
问题: 这是我的解决方案:Javascript 我对最小差分算法问题的解决方案是否具有最佳时空复杂度(O(nLog(n)和#x2B;mLog(m))?,javascript,algorithm,sorting,data-structures,Javascript,Algorithm,Sorting,Data Structures,问题: 这是我的解决方案: function smallestDifference(arrayOne, arrayTwo) { const combinedArray = [...arrayOne, ...arrayTwo]; combinedArray.sort((a, b) => a - b); let smallestDifference = Infinity; let arrayOneInt = null; let
function smallestDifference(arrayOne, arrayTwo) {
const combinedArray = [...arrayOne, ...arrayTwo];
combinedArray.sort((a, b) => a - b);
let smallestDifference = Infinity;
let arrayOneInt = null;
let arrayTwoInt = null;
for (let i = 0; i < combinedArray.length - 1; i++) {
if (Math.abs(combinedArray[i] - combinedArray[i+1]) < smallestDifference) {
if (arrayOne.includes(combinedArray[i]) && arrayTwo.includes(combinedArray[i+1])) {
smallestDifference = Math.abs(combinedArray[i] - combinedArray[i+1]);
arrayOneInt = combinedArray[i];
arrayTwoInt = combinedArray[i+1];
} else if (arrayOne.includes(combinedArray[i+1]) && arrayTwo.includes(combinedArray[i])) {
smallestDifference = Math.abs(combinedArray[i] - combinedArray[i+1]);
arrayOneInt = combinedArray[i+1];
arrayTwoInt = combinedArray[i];
}
}
}
return [arrayOneInt, arrayTwoInt];
}
函数最小差异(arrayOne,arrayTwo){
const combinedArray=[…阵列一,…阵列二];
组合数组排序((a,b)=>a-b);
让最小的差异=无穷大;
让arrayOneInt=null;
让arrayTwoInt=null;
for(设i=0;i
这是给定的最佳解决方案
function smallestDifference(arrayOne, arrayTwo) {
arrayOne.sort((a, b) => a - b);
arrayTwo.sort((a, b) => a - b);
let idxOne = 0;
let idxTwo = 0;
let smallest = Infinity;
let current = Infinity;
let smallestPair = [];
while (idxOne < arrayOne.length && idxTwo < arrayTwo.length) {
let firstNum = arrayOne[idxOne];
let secondNum = arrayTwo[idxTwo];
if (firstNum < secondNum) {
current = secondNum - firstNum;
idxOne++;
} else if (secondNum < firstNum) {
current = firstNum - secondNum;
idxTwo++;
} else {
return [firstNum, secondNum]
}
if (smallest > current) {
smallest = current;
smallestPair = [firstNum, secondNum];
}
}
return smallestPair;
}
函数最小差异(arrayOne,arrayTwo){
排序((a,b)=>a-b);
排序((a,b)=>a-b);
设idxOne=0;
设idxTwo=0;
让最小=无穷大;
让电流=无穷大;
设smallestPair=[];
while(idxOne当前){
最小=电流;
smallestPair=[firstNum,secondNum];
}
}
返回最小对;
}
对于上述最优解,时间复杂度为O(nLog(n)+mLog(m)),空间复杂度为O(1)。我上面的解决方案是否也与此时间复杂度匹配?您有长度为N+M的循环
combinedArray
。在此循环中,您有长度为O(N)和O(M)的arrayOne.includes
和arrayTwo.includes
所以你至少有O((N+M)^2)大于O(nLog(M)+mLog(N))谢谢!我不清楚是否包含O(N)