2017-11-24 19 views
-2

에서 A와 B 사이의 최단 거리 찾기 : 목록이 있습니다이 문제에 대한 가장 빠른 해결책이다 Node.js를

가와, A와 B 사이의 최단 거리를 찾아 B 배열에 [4, 8, 9, 10, 100]과 같은 배열의 값의 경우, 해당 배열의 두 값 사이의 최소 간격을 알아야합니다. 음수이면 절대 값을 사용하십시오.

+0

http://idownvotedbecau.se/noattempt/ – Pac0

+0

'최고'무엇을 의미합니까? 귀하의 질문에 말한 방식에 따라 '가장 빠름'과 다른 것으로 보입니다. – Pac0

+0

@kevin 두 개의 값 또는 두 개의 연속 된 값 사이? –

답변

1
  • 정렬 지정된 배열
  • 최저 차이

    함수 closetPairs (도착) { 하자 모든 쌍을 찾기 정렬 된 배열의 요소의 쌍에 대해 최소의 차이를 찾아 결과 = []; let minDiff = Number.MAX_VALUE;

    arr.sort((a, b) => { 
        return a - b; 
    }); 
    
    // find the lowest difference for a pair of elements in the sorted array 
    for (let i = 0; i < arr.length - 1; i++) { 
        let currDiff = arr[i + 1] - arr[i]; 
        if (currDiff < minDiff) { 
         minDiff = currDiff; 
        } 
    } 
    
    // find all the pairs with lowest differnece 
        for (let j = 0; j < arr.length - 1; j++) { 
         let sortedEleDiff = arr[j + 1] - arr[j]; 
         if (minDiff == sortedEleDiff) { 
          result.push(arr[j + 1], arr[j]); 
         } 
        } 
    
        return result.sort((a, b) => { 
         return a - b; 
        }); 
    
    } 
    
    let inputArr = [4, 8, 9, 10, 100]; 
    
    console.log(closetPairs(inputArr)); // [ 8, 9, 9, 10 ] 
    
0

배열을 먼저 정렬하면 인접한 두 요소간에 절대 값의 차이가 가장 작습니다. 원본 배열에 영향을 미치지하지 않으려면

let data = [4,8,9,10,100]; 
 

 
function findSmallDelta(data) { 
 

 
    data.sort(); 
 
    let minDelta = -1; 
 
    for (let i = 0; i < data.length - 1; i++) { 
 
     let delta = Math.abs(data[i] - data[i+1]); 
 
     if (minDelta === -1 || delta < minDelta) { 
 
      minDelta = delta; 
 
     } 
 
    } 
 
    return minDelta; 
 
} 
 

 
console.log(findSmallDelta(data));

, 당신은 정렬하기 전에 소스 배열의 복사본을 만들 수 있습니다. 배열을 정렬 한 다음 이웃 요소 사이의 델타를 테스트하는 것이 모든 가능한 델타를 비교하는 것보다 더 빠를 가능성이 높습니다.

+0

@kevin - 나는이 질문보다 더 복잡한 것처럼 보이는 이유 때문에 대답을 선택했을 때 왜 대답을 선택했는지 궁금합니다. – jfriend00