ปัญหา
อาร์เรย์ nums และ p ลบ subarray (ไม่ใช่ทั้งอาร์เรย์) น้อยที่สุด ให้ผลรวมที่เหลือหาร p ลงตัว หาความยาว subarray นั้น
ตัวอย่าง
nums=[8,2,6,5,3], p=7 → 1 (ลบ 3 เหลือ 21 หาร 7 ลงตัว)
ขั้นตอนการแก้ปัญหา
ans := inf, s := sum(nums) % pd := {0: -1},cum := 0- ถ้า
s == 0: คืน 0 - วน
i0..n-1:cum += nums[i]r := cum % p- ถ้า
(r - s) % p in d:ans = min(ans, i - d[(r-s)%p]) d[r] = i
- คืน
ans if ans < len(nums) else -1
การนำไปใช้งาน (Python)
def solve(nums, p):
ans = float("inf")
s = sum(nums) % p
d = {0: -1}
cum = 0
if s == 0:
return 0
for i in range(len(nums)):
cum += nums[i]
r = cum % p
if (r - s) % p in d:
ans = min(ans, i - d[(r - s) % p])
d[r] = i
return ans if ans < len(nums) else -1
nums = [8, 2, 6, 5, 3]
p = 7
print(solve(nums, p))
อินพุต
[8,2,6,5,3], 7
เอาต์พุต
1