Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tìm đỉnh của mảng có đỉnh trung tâm trong JavaScript

Mảng có đỉnh trung tâm (Centrally Peaked Array)

Chúng ta gọi một mảng arr là mảng có đỉnh trung tâm nếu:

  • arr.length >= 3
  • Tồn tại i với 0 < i < arr.length - 1 sao cho:
    • arr[0] < arr[1] < ... < arr[i-1] < arr[i]
    • arr[i] > arr[i+1] > ... > arr[arr.length - 1]

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một mảng số arr làm đối số duy nhất. Mảng đầu vào là một mảng có đỉnh trung tâm. Hàm phải trả về chỉ số đỉnh của mảng này.

Ví dụ, nếu đầu vào là:

Đầu vào

const arr = [4, 6, 8, 12, 15, 11, 7, 4, 1];

Đầu ra

const output = 4;

Giải thích

Vì phần tử tại chỉ số 4 (giá trị 15) là đỉnh của mảng này.

Ví dụ

Dưới đây là mã thực hiện:

const arr = [4, 6, 8, 12, 15, 11, 7, 4, 1];
const findPeak = (arr = []) => {
  if (arr.length < 3) { return -1; }
  const helper = (low, high) => {
    if (low > high) { return -1; }
    const middle = Math.floor((low + high) / 2);
    if (arr[middle] <= arr[middle + 1]) {
      return helper(middle + 1, high);
    }
    if (arr[middle] <= arr[middle - 1]) {
      return helper(low, middle - 1);
    }
    return middle;
  };
  return helper(0, arr.length - 1);
};
console.log(findPeak(arr));

Kết quả

4