Tôi gặp vấn đề khi cần (chắc chắn ít nhất) đi qua toàn bộ danh sách để giải quyết. Câu hỏi là để tìm ra số lượng lớn nhất của các số liên tiếp trong một danh sách mà thêm đến một yếu tố (lớn hơn) trong danh sách đó. Nếu không có thì chúng ta chỉ lấy giá trị lớn nhất trong danh sách khi tổng kết ứng viên và 1 là số phần tử liên tiếp lớn nhất.Tăng tốc mã Python phải trải qua toàn bộ danh sách
Mã chung của tôi hoạt động, nhưng không quá tốt đối với các danh sách lớn (> 500.000 phần tử). Tôi chỉ tìm kiếm các mẹo để làm thế nào tôi có thể tiếp cận vấn đề một cách khác nhau. Cách tiếp cận hiện tại của tôi:
L = [1,2,3,4,5,6,7,8,9,10]
candidate_sum = L[-1]
largest_count = 1
N = len(L)
i = 0
while i < N - 1:
s = L[i]
j = 0
while s <= (N - L[i + j + 1]):
j += 1
s += L[i+j]
if s in L and (j+1) > largest_count:
largest_count = j+1
candidate_sum = s
i+=1
Trong trường hợp này, câu trả lời sẽ là [1,2,3,4] khi chúng thêm tối đa 10 và độ dài là 4 (rõ ràng ví dụ này L là một ví dụ rất đơn giản) .
sau đó tôi đã làm cho nó nhanh hơn bằng cách thay đổi ban đầu trong khi điều kiện vòng lặp để:
while i < (N-1)/largest_count
Không phải là một giả định tuyệt vời, nhưng suy nghĩ cơ bản mà việc phân phối số có phần thống nhất, vì vậy hai con số trên nửa cuối năm danh sách là trung bình lớn hơn số cuối cùng trong danh sách, và do đó bị loại.
Tôi chỉ tìm kiếm cho:
- tắc nghẽn có thể
- đề nghị như những cách tiếp cận khác nhau để thử
Bạn cần xác định vấn đề của mình chính xác hơn.Danh sách luôn được sắp xếp và đơn điệu? Liệu có bất kỳ khoảng trống nào trong chúng? Giải pháp tốt nhất sẽ khác nhau tùy thuộc vào tuyên bố vấn đề chính xác. –
@ ŁukaszRogalski danh sách luôn được sắp xếp, tất cả các yếu tố là duy nhất để danh sách là đúng tăng và có, có khoảng cách giữa các số liên tiếp – dimebucker91