호수의 양

2차원 막대 높이를 나타내는 양의 정수 배열이 주어지면 막대 높이 배열이 주어진 섬의 모든 호수에 담을 수 있는 총 물의 양을 계산할 수 있는 알고리즘을 설계하십시오. 각 막대의 너비가 1단위인 고도 지도를 가정합니다.
예 높이 [1,3,2,4,1,3,1,4,5,2,2,1,4,2]의 배열이 주어지면 15를 반환합니다(부피가 1,7,7인 수역 3개) 15의 총 부피를 산출합니다).

Input: [1,3,2,4,1,3,1,4,5,2,2,1,4,2]
Output: 15




내 접근 방식:


  • 높이 배열을 반복합니다.
  • maximumBefore(현재 높이 이전의 최대 높이) 찾기
  • maximumAfter(현재 높이 이후의 최대 높이) 찾기
  • If current가 maximumBefore 또는 maximumAfter보다 큽니다. maximumBefore를 업데이트하고 계속하면 else 현재 높이의 볼륨은 (minimum of maximumAfter, maximumBefore) - height가 됩니다.


  • 암호:




    var a = [1,3,2,4,1,3,1,4,5,2,2,1,4,2];
    function getVolume (arr) {
        let maxBefore = 0;
        let answer = 0;
        let maxAfter = 2;
        for(var i = 1; i < arr.length-1; i++){
            if(arr[i] >= arr[maxBefore]) {
                maxBefore = i;
                continue;
            }
            if(i >= maxAfter){
                let max = i+1;
                for(var innerIndex =i+1; innerIndex< arr.length; innerIndex +=1) {
                    if(arr[max]<=arr[innerIndex]) {
                        max= innerIndex;
                    }
                }
                maxAfter = max;
            }
            if(arr[i] < arr[maxBefore] && arr[i] < arr[maxAfter]) {
                answer += Math.min(arr[maxBefore], arr[maxAfter])-arr[i];
            }
        }
        return answer;
    }
    let sol = getVolume(a);
    console.log('volume of lakes: ',sol); //volume of lakes: 15
    


    토론 상자에서 귀하의 접근 방식에 대해 논의하거나 [email protected]으로 저를 연락할 수 있습니다.

    읽어 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기