Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我对最小差分算法问题的解决方案是否具有最佳时空复杂度(O(nLog(n)和#x2B;mLog(m))?_Javascript_Algorithm_Sorting_Data Structures - Fatal编程技术网

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)