网站更换服务器需要重新备案吗我对网络营销的理解
文章目录
- 前缀和基础
- 3427.变长子数组求和
- 前缀和与哈希表
- 1524.和为奇数的子数组数目
- 距离和
- 前缀和,就是定义
pre[i] 为nums的前i个元素的和值
,一般pre
数组长度会=n+1
,这样在计算的nums
数组中下标i到j
的情况的时候,直接就可以使用pre[j+1]-pre[i]
,如果找的是第i个到第j个
,那么就是pre[j]-pre[i-1]
- 所以得根据题目求解的是
下标还是第几个确定具体的计算公式
前缀和与哈希表
:
前缀和基础
3427.变长子数组求和
3427.变长子数组求和
- 求解的是
下标问题,所以是pre[j+1] - pre[i]
类型
class Solution:def subarraySum(self, nums: List[int]) -> int:# 前缀和的问题n = len(nums)pre = [0]*(n+1)for i in range(n):pre[i+1] = pre[i] + nums[i]ans = 0for i in range(n):start = max(0,i-nums[i])ans += pre[i+1] - pre[start] return ans
前缀和与哈希表
1524.和为奇数的子数组数目
1524.和为奇数的子数组数目
- 使用
哈希表+前缀和
,要注意这个前缀和的第一个也要加入哈希表
!
class Solution:def numOfSubarrays(self, arr: List[int]) -> int:# 直接用哈希表存储mod = 10**9 + 7store = [0,0]n = len(arr)# 使用前缀和pre = [0]*(n+1)for i in range(n):pre[i+1] = pre[i] + arr[i]ans = 0for i in range(n+1):if pre[i] % 2==0:ans = ans + store[1]store[0] = store[0] + 1else:ans = ans + store[0]store[1] = store[1] + 1return ans % mod