Menu
CoddyTech

Binary Search

Bạn có một danh sách số nguyên nums được sắp xếp theo thứ tự tăng dần, không có giá trị nào lặp lại, và một số nguyên target. Hãy trả về chỉ số của target trong nums, tính từ 0, hoặc -1 nếu giá trị đó không có trong danh sách. Mục tiêu là đạt độ phức tạp thời gian O(log n), nghĩa là bạn không thể kiểm tra từng phần tử.

Hàm

search(nums: integer-array, target: integer) → integer
numsinteger-array
danh sách đã sắp xếp gồm các số nguyên phân biệt
targetinteger
giá trị cần tìm
Trả vềinteger
chỉ số của target trong nums, hoặc -1 nếu không có

Ràng buộc

  • 1 ≤ nums.length ≤ 104
  • -104 ≤ nums[i], target ≤ 104
  • nums được sắp xếp theo thứ tự tăng dần nghiêm ngặt, vì vậy mỗi giá trị chỉ xuất hiện một lần.

Ví dụ

Đầu vào
nums = [-7, -2, 0, 4, 9, 15, 23]target = 9
Đầu ra
4
Giải thích
nums[4] có giá trị là 9. Phép tìm kiếm xét chỉ số 3 (giá trị 4, quá nhỏ), rồi đến chỉ số 5 (giá trị 15, quá lớn), sau đó đến chỉ số 4, nơi phép tìm kiếm tìm thấy 9.
challenge icon

Câu hỏi mở rộng

Nếu các giá trị trong nums có thể lặp lại, làm thế nào để bạn trả về chỉ số đầu tiên của target mà vẫn giữ độ phức tạp O(log n)?

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

Kiểm thử #1

Kiểm thử #2

Đối số

nums = [-7, -2, 0, 4, 9, 15, 23]
target = 9

Đầu ra mong đợi

4