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
ivới0 < i < arr.length - 1sao 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