Menu
CoddyTech

House Robber

Trung bìnhQuy hoạch độngpython iconjava iconcpp iconc iconjs icon+10

Những ngôi nhà nằm thành một hàng dọc theo con phố, và nums[i] là số tiền trong ngôi nhà i. Bạn có thể lấy tiền từ bất kỳ ngôi nhà nào mình chọn, nhưng không được lấy tiền từ hai ngôi nhà nằm cạnh nhau. Hãy trả về tổng số tiền lớn nhất bạn có thể lấy.

Hàm

rob(nums: integer-array) → integer
numsinteger-array
tiền trong mỗi ngôi nhà, theo thứ tự trên phố
Trả vềinteger
tổng lớn nhất bạn có thể lấy mà không lấy từ hai ngôi nhà liền kề

Ràng buộc

  • 1 ≤ nums.length ≤ 104
  • 0 ≤ nums[i] ≤ 1000
  • Đáp án tối đa là 5 × 106, nên vừa với một số nguyên có dấu 32 bit.

Ví dụ

Đầu vào
nums = [5, 3, 4, 11, 2]
Đầu ra
16
Giải thích
Lấy 5 và 11 từ nhà số 0 và số 3 để được 16. Bạn có thể bỏ qua hai ngôi nhà liên tiếp, và cách này hiệu quả hơn mọi phương án khác: 5 + 4 + 2 = 11 và 3 + 11 = 14.
challenge icon

Câu hỏi mở rộng

Trả về các ngôi nhà cần lấy cùng với tổng số. Bạn cần giữ lại những gì từ bảng để dựng lại danh sách đó, và liệu hai tổng đang chạy có làm được việc này không?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

nums = [5, 3, 4, 11, 2]

Đầu ra mong đợi

16