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 vẽ các điểm của mảng này trên trục y với mỗi điểm liền kề cách nhau một đơn vị trên trục x, đồ thị sẽ trông như sau:

Đồ thị này cho thấy rõ ràng tồn tại hai cực đại cục bộ (đỉnh) trong mảng này tại chỉ số 3 và 7 với giá trị 7 và 4 tương ứng.
Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng số nguyên arr làm đối số duy nhất. Hàm phải trả về một đối tượng chứa hai thuộc tính: maximas và positions. Cả hai thuộc tính này đều là mảng, mảng maximas chứa giá trị của các cực đại cục bộ trong mảng và mảng positions chứa chỉ số tương ứng của chúng.
Ví dụ, nếu đầu vào là mảng trên, đầu ra sẽ như sau:
const output = { maximas: [7, 4], positions: [3, 7] };
Ví dụ
Dưới đây là mã thực hiện:
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));
Kết quả
Đầu ra trên console:
{ maximas: [ 7, 4 ], positions: [ 3, 7 ] }