Chào mn. Em có 1 bài tập python, nhập vào các dòng, cho 1 danh sách rỗng. Nếu dòng bắt đầu bằng số 1 thêm số đứng sau 1 vào danh sách, bắt đầu bằng số 2 thì kiểm tra số đứng sau 2 có trong danh sách hay không. Việc nhập kết thúc bằng 1 dòng chỉ chứa số 6. In ra danh sách thu được. vd:
1 2
1 1
2 3
6
Kêt thúc bằng số 6
Tuy nhiên em có 1 vài test bị time limit ở việc nhập. Cho em hỏi có cách nào tối ưu không ạ. Code của em
a=list(map(int, input().split()))
while a[0]!=6:
if a[0]==1:
b.append(a[1])
else:
if a[1] in b:
print(1)
else:
print(0)
a=list(map(int, input().split()))
Đề bài yêu cầu gì, điều kiện gì, phải làm gì để đạt mục đích gì?
Khi mình hỏi, thì chịu khó trình bày rõ ràng và đầy đủ ý.
Thói quen này rất quan trọng trong công việc, đặt biệt nếu bạn muốn thăng tiến về sau.
Nhiều người cứ nói sao tui code giỏi mà không được làm lead, còn thằng kia thua tui mà cho nó làm lead, chắc có mờ ám gì. Nhưng họ lại không nghĩ tới cái “khả năgn diễn đạt” và “kỹ năng giao tiếp” là quan trong
Mình có xử lý hết trong vòng lặp rồi mà nó lại bị time limit, với lại khi nhập 1 2 hay 2 44 thì sẽ có dấu cách và số thứ 2 có thể có nhiều chữ số nên mình chỉ nghĩ đc là nhập rồi split nó ra
Mình nghĩ vấn đề chỉ ở việc nhập thôi, tại mình có nghĩ rất lâu và tìm kiếm trên mạng nhiều rồi mà không được nên mình mới lên đây hỏi đó. Hi vọng nếu có một cách nhập nào đó nhanh hơn thôi, có gì mình sai mong bạn thông cảm.
Hm, làm sao cậu biết cậu bị time limit ở việc nhập vậy?
Tớ tưởng tất cả mọi người đều dùng hàm input để nhập chứ?
Đoạn code này thực ra không có ý nghĩa, phải không? Vì đề bài không nói là cậu phải in 0 - 1 cho mỗi phần tử mà
Việc in ra stdout thực ra rất tốn kém. Cậu lại in ở trong loop => khả năng cao đây là lý do cậu gặp vấn đề về mặt thời gian đó.
Đoạn code đầu tiên mình up chỉ có nhập thôi á bạn. Mình lấy từng phần tử nhập hay từng list rồi lưu lại để xử lý sau thì k đủ bộ nhớ, còn nếu thực hiện luôn trong while thì vẫn không thể được( mình có lưu giá trị 0 và 1 để in ra sau mà). Có thể do cách mình store giá trị chưa đúng
Nào, logic mà nói, nếu đoạn code của cậu bị time limit ở đoạn nhập, mà đề bài yêu cầu lấy đầu vào từ stdin, tất cả các code đều sẽ bị time limit, đúng không?
Tớ không nghĩ cậu gặp vấn đề ở phần nhập đâu. Cậu không có cách nào optimize phần đó cả.
Sorry, tớ không thấy có ràng buộc bộ nhớ nào ở trong đề bài của cậu.
Cậu có thể share đề gốc của cậu được không? Vì chốc chốc cậu lại có đề cập tới 1 yêu cầu mới, nên việc thảo luận sẽ rất kém hiệu quả và tốn thời gian của tất cả.
“Thực hiện luôn trong while” => ý cậu có phải là nếu cậu thực hiện xử lý từng dòng đầu vào ngay khi nhận input?
Nếu tớ không nhầm, đó là code mà cậu đưa bọn tớ ở post #1 phải không?
Mặt khác, đề bài cậu yêu cầu:
Chứ có nói gì tới việc in ra 0 với 1 đâu?
Như tớ đề cập, print ra console là thao tác đắt đỏ. Nếu như đó không phải là yêu cầu, cậu có lẽ nên thử xóa nó đi, và submit lại bài tập của cậu. Thử xem nhé!
Trong lập trình, cậu nên đo đạc để chứng minh giả thiết, hơn là nêu ra giả thiết và để đó.
Cậu thử đo thời gian thực thi của từng dòng lệnh, in ra, và phân tích xem
Ngoài ra, store giá trị cũng không liên quan tới việc nhập (nhập đối với tớ chỉ lấy input thôi. Store giá trị là xử lý kết quả nhập, nên tớ không phân loại nó nằm ở “phần nhập” đâu )