添加鏈接描述
class Solution:def subarraySum(self, nums: List[int], k: int) -> int:# 思路是從第一個元素開始遍歷,加到爆,就把指針向前移一位result=0for i in range(len(nums)):# 如果爆了,就向后移一位if i!=len(nums)-1:j=i+1sum=nums[i]while sum<k and j<len(nums):sum=sum+nums[j]j=j+1if sum==k:result+=1 return result
考慮錯誤,沒有如果都是正數,可以,但是有負數的話,整個邏輯就錯掉了。
class Solution:def subarraySum(self, nums: List[int], k: int) -> int:count, total, sum_dict = 0, 0, {0: 1} # 初始化計數器、總和和字典for num in nums:total += num # 計算當前位置的總和if total - k in sum_dict:count += sum_dict[total - k] # 如果前綴和 - k 在字典中出現過,更新計數器sum_dict[total] = sum_dict.get(total, 0) + 1 # 更新當前前綴和出現次數return count
思路:
- 這個題要找到就是指針為i的地方的sum[i]-sum[j]是否等于k
- 現在我們知道sum[i]的值(就是從0下標加到i下標),也知道k的值,唯一不知道的就是sum[j](從頭加到下標j的值)是否存在
- 所以用一個字典記錄sum[j]的值出現的次數
- 妙啊妙啊