Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 배열의 모든 피크와 위치 찾기

<시간/>

빌드업

JavaScript에 다음과 같은 배열이 있다고 가정합니다.

const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4];

이 배열의 점을 x축에서 단위 거리만큼 떨어진 각 인접 점이 y축에 표시하면 그래프는 다음과 같이 보일 것입니다. -

JavaScript에서 배열의 모든 피크와 위치 찾기

이 그래프는 인덱스 3과 7에 각각 값이 7과 4인 두 개의 로컬 최대값(피크)이 있음을 분명히 보여줍니다.

문제

정수 배열 arr을 첫 번째이자 유일한 인수로 취하는 JavaScript 함수를 작성해야 합니다.

우리의 함수는 최대값과 위치라는 두 가지 속성을 포함하는 객체를 반환해야 합니다.

이 두 속성은 모두 배열이며 최대 배열에는 배열의 localmaximas 값이 포함되고 위치 배열에는 해당 인덱스가 포함됩니다.

예를 들어, 함수에 대한 입력이 -

인 경우

따라서 위의 배열의 경우 출력은 다음과 같아야 합니다. -

const output = {
maximas: [7, 4],
positions: [3, 7]
};

예시

다음은 코드입니다 -

const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4];
const findMaxima = (arr = []) => {
   let positions = []
   let maximas = []
   for (let i = 1; i < arr.length - 1; i++) {
      if (arr[i] > arr[i - 1]) {
         if (arr[i] > arr[i + 1]) {
            positions.push(i)
            maximas.push(arr[i])
         } else if (arr[i] === arr[i + 1]) {
            let temp = i
            while (arr[i] === arr[temp]) i++
            if (arr[temp] > arr[i]) {
               positions.push(temp)
               maximas.push(arr[temp])
            }
         }
      }
   }
   return { maximas, positions };
};
console.log(findMaxima(arr));

출력

그러면 출력은 다음과 같아야 합니다. -

{ maximas: [ 7, 4 ], positions: [ 3, 7 ] }