สมมติว่ามีรายการตัวเลข nums และค่า target ต้องการหาจำนวนสับลิสต์ (subarrays) ที่ผลรวมเท่ากับ target
ตัวอย่าง: nums = [3, 0, 3], target = 3 ผลลัพธ์คือ 4 สับลิสต์คือ [3], [3, 0], [0, 3], [3]
ขั้นตอนการแก้ปัญหา
- สร้าง map
tempว่าง, ตั้งtemp[0] = 1 s = 0(prefix sum),ans = 0- วนลูปแต่ละ index
i:s += nums[i]comp = s - target- ถ้า
compอยู่ในtemp:ans += temp[comp] temp[s] += 1
- คืนค่า
ans
ตัวอย่างโค้ด
from collections import defaultdict
class Solution:
def solve(self, nums, target):
temp = defaultdict(int)
temp[0] = 1
s = 0
ans = 0
for i in range(len(nums)):
s += nums[i]
comp = s - target
if comp in temp:
ans += temp[comp]
temp[s] += 1
return ans
ob = Solution()
nums = [3, 0, 3]
target = 3
print(ob.solve(nums, target))
อินพุต
[3, 0, 3], 3
เอาต์พุต
4