Anh mình bữa nay cho mình có cái bài này:
Thịnh là 1 nhân viên nhà hàng. Hằng ngày, Thịnh phải xếp đũa vào các giấy bọc đũa. Hãy giúp Thịnh đếm số bao cần có khi nhận được 1 bó đũa. Biết các có tồn tại các loại đũa khác nhau.
Đánh số cho các loại đũa, ta có cái mảng ar này, giờ phải code hàm countWrappers(ar) trả về số giấy bọc đũa cần phải dùng.
ar = [1, 22, 2, 1, 4, 3, 1, 5, 1, 2, 2, 4]
print(countWrappers(ar))
#4
Code của mình
import time
import random
# Mình random ra 1 mảng lớn lớn 1 tý để xem performance
ar = []
for i in range(9999):
ar.append(random.randint(1, 100))
for i in range(5):
# Method 1
start = time.time()
mapper = {}
for num in ar:
if num not in mapper:
mapper[num] = ar.count(num)
arr = [mapper[x]//2 for x in mapper if mapper[x]>1]
print(sum(arr))
end = time.time()
print("Time 1: ", end-start)
# Method 2
start = time.time()
mapper = {i:ar.count(i) for i in ar}
arr = [mapper[x]//2 for x in mapper if mapper[x]>1]
print(sum(arr))
end = time.time()
print("Time 2: ", end-start)
# Method 3
start = time.time()
ar1 = sum(list({x: divmod(ar.count(x), 2)[0] for x in ar}.values()))
print(ar1)
end = time.time()
print("Time 3:",end-start)
Mình chỉ nghĩ ra được ngần đó cách, nhưng vẫn chậm sấp mặt, nhà mình có ý gì hay gợi ý cho mình với ạ.
Mình xin chân thành cảm ơn.