Menu
CoddyTech

Find Peak Element

Mảng nums tăng rồi giảm: mỗi giá trị lớn hơn giá trị đứng trước nó cho đến một chỉ số nào đó, và mỗi giá trị sau chỉ số đó nhỏ hơn giá trị đứng trước nó. Một trong hai phần có thể rỗng, vì vậy mảng có thể chỉ tăng hoặc chỉ giảm. Giá trị tại chỉ số chuyển hướng là đỉnh, giá trị duy nhất lớn hơn mọi giá trị lân cận.

Trả về chỉ số của đỉnh trong thời gian O(log n).

Hàm

findPeakElement(nums: integer-array) → integer
numsinteger-array
các giá trị tăng lên đến một đỉnh rồi giảm xuống
Trả vềinteger
chỉ số của đỉnh

Ràng buộc

  • 1 ≤ nums.length ≤ 5000
  • -106 ≤ nums[i] ≤ 106
  • nums[i] != nums[i+1] với mọi i hợp lệ.
  • nums tăng nghiêm ngặt đến một chỉ số rồi giảm nghiêm ngặt sau đó, nên chỉ có đúng một đỉnh.

Ví dụ

Đầu vào
nums = [2, 5, 9, 4, 1]
Đầu ra
2
Giải thích
Các giá trị tăng dần qua 2, 5 và 9, sau đó giảm dần qua 4 và 1. Điểm chuyển hướng là 9, chỉ số 2.
challenge icon

Câu hỏi mở rộng

Trong một lưới mà không có hai ô liền kề nào bằng nhau, đỉnh là ô lớn hơn tối đa bốn ô lân cận. Bạn có thể tìm thấy một ô như vậy mà không cần đọc mọi ô không?

Đặt lại code
def findPeakElement(nums):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

nums = [2, 5, 9, 4, 1]

Đầu ra mong đợi

2