当前位置: 首页 > article >正文

算法之 前缀和

文章目录

  • 前缀和基础
    • 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 = 0
        for 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 + 7
        store = [0,0]
        n = len(arr)
        # 使用前缀和
        pre = [0]*(n+1)
        for i in range(n):
            pre[i+1] = pre[i] + arr[i]
        ans = 0
        for i in range(n+1):
            if pre[i] % 2==0:
                ans = ans + store[1]
                store[0] = store[0] + 1
            else:
                ans = ans + store[0]
                store[1] = store[1] + 1
        return ans % mod

距离和


http://www.kler.cn/a/574372.html

相关文章:

  • vector详解
  • netty中Future和ChannelHandler
  • 鸿蒙Next网络请求~上传文件pdf
  • SCI1区TOP:自适应学习粒子群算法SLPSO,深度解析+性能实测
  • 23种设计模式之单例模式(Singleton Pattern)【设计模式】
  • 智能文档制度管理系统技术
  • istio从入门到精通(1)
  • vue+neo4j 四大名著知识图谱问答系统
  • es 慢查询引起 cpu报警处理方法
  • 计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)
  • Java,Golang,Rust 泛型的大体对比小记
  • 验证测试 .NET 10 预览版的 Windows 窗体中的剪贴板新增功能
  • 【1Panel】平替宝塔面板!1Panel面板香橙派部署结合内网穿透远程管理
  • 第5章:vuex
  • C++ Primer 拷贝控制和资源管理
  • 嵌入式 ARM Linux 系统构成(2):Linux内核层
  • 文本处理Bert面试内容整理-如何使用BERT进行微调?
  • FX-枚举
  • Python编程中常见的10个案例
  • Java爬虫获取淘宝商品搜索接口(item_search)的详细解析