Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm tất cả các đỉnh và vị trí của chúng trong một mảng trong JavaScript

Xây dựng

Giả sử chúng ta có mảng sau trong JavaScript -

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

Nếu chúng ta vẽ biểu đồ các điểm của mảng này trên trục y với mỗi điểm liền kề là đơn vị khoảng cách từ trục x, biểu đồ sẽ trông như thế này -

Tìm tất cả các đỉnh và vị trí của chúng trong một mảng trong JavaScript

Biểu đồ này cho thấy rõ ràng rằng tồn tại hai cực đại cục bộ (đỉnh) trong mảng này ở chỉ số 3 và 7 với các giá trị tương ứng là 7 và 4.

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript nhận một mảng các số nguyên, arr, làm đối số đầu tiên và duy nhất.

Hàm của chúng ta phải trả về một đối tượng có chứa hai thuộc tính, cực đại và vị trí.

Cả hai thuộc tính này sẽ là mảng và mảng cực đại sẽ chứa giá trị của các localmaximas trong mảng và mảng vị trí sẽ chứa các chỉ số tương ứng của chúng.

Ví dụ:nếu đầu vào của hàm là -

Do đó, đối với mảng trên, đầu ra sẽ giống như -

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

Ví dụ

Sau đây là mã -

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));

Đầu ra

Sau đó, đầu ra phải là -

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