Chúng tôi bắt buộc phải viết một hàm JavaScript lấy một mảng số làm đối số đầu tiên và duy nhất.
Hàm sẽ tìm và trả về một số như vậy từ mảng lớn hơn cả hai, số ở ngay bên phải và số ở ngay bên trái của nó. Nếu tồn tại nhiều hơn một phần tử như vậy trong mảng, hàm của chúng ta sẽ trả về bất kỳ phần tử nào trong số chúng.
Ví dụ -
Nếu mảng đầu vào là -
const arr = [3, 6, 7, 9, 8, 2, 5];
Sau đó, đầu ra phải là -
const output = 9;
Vì câu hỏi yêu cầu tìm phần tử đỉnh, chúng tôi có thể sử dụng phiên bản đã được tinh chỉnh của thuật toán tìm kiếm nhị phân.
Các bước tương tự sẽ là -
-
Nhìn vào bất kỳ phần tử nào.
-
Nếu phần tử tiếp theo và các phần tử trước đó đều nhỏ hơn hiện tại, chúng tôi tìm asolution, sau đó trả về chỉ số của hiện tại.
-
Nếu phần tử tiếp theo lớn hơn dòng điện, phải có một đỉnh ở bên phải, nhìn theo phương pháp kế toán là bên phải.
-
Nếu phần tử trước đó lớn hơn phần tử hiện tại, thì phải có một đỉnh ở bên trái, nhìn theo phương pháp kế thừa là bên trái.
Ví dụ
Sau đây là mã -
const arr = [3, 6, 7, 9, 8, 2, 5]; const greaterThanAdjacent = (arr = [], start = 0, end = arr.length) => { let mid = start + Math.floor((end - start) / 2); let curr = arr[mid]; let prev = mid-1 < 0 ? -Infinity : arr[mid-1]; let next = mid+1 > arr.length-1 ? -Infinity : arr[mid+1]; if (curr > prev && curr > next){ return arr[mid]; } if (curr < next){ return greaterThanAdjacent(arr, mid+1, end); } if (curr > next){ return greaterThanAdjacent(arr, start, mid-1); } return null; }; console.log(greaterThanAdjacent(arr));
Đầu ra
Sau đây là đầu ra của bảng điều khiển -
9