Mô tả bài toán
Cho danh sách nums (số không âm) và k > 0. Kiểm tra xem có tồn tại sublist độ dài ≥ 2 có tổng chia hết cho k hay không.
Ví dụ: nums = [12,6,3,4], k = 5 → True (sublist [12,3] tổng 15 chia hết 5).
Giải thuật (Prefix Sum Modulo + Hash Map)
sum = 0,m = {0: -1}.- Duyệt
itừ 0 đếnn-1:sum = (sum + nums[i]) % k.- Nếu
sumđã có trongmvài - m[sum] >= 2: trả vềTrue. - Nếu
sumchưa có:m[sum] = i.
- Trả về
False.
Ví dụ mã Python
class Solution:
def solve(self, nums, k):
sum = 0
m = {}
m[0] = -1
for i in range(0, len(nums)):
sum += nums[i]
sum %= k
if sum in m:
if i - m[sum] >= 2:
return True
else:
m[sum] = i
return False
ob = Solution()
nums = [12, 6, 3, 4]
k = 5
print(ob.solve(nums, k))
Đầu vào
[12, 6, 3, 4], 5
Đầu ra
True