【前缀和】974. 和可被 K 整除的子数组

简介: 同样的,本题利用了前缀和的定理.当(pre[i]-pre[j-1])mod k==0时.即为所寻找的答案.

Halo,这里是Ppeua。平时主要更新C++,数据结构算法,Linux与ROS…感兴趣就关注我bua!


974. 和可被 K 整除的子数组


c1103ce101234f5bb5b6cc89c6fcd475.png


题目:


d5ed696f0b70427d99cd075b81415061.png


示例:


a066ef4f27db42ea8e71a5287e7b8513.png


题解:


本题与560.和为K的子数组高度相似


同样的,本题利用了前缀和的定理.当(pre[i]-pre[j-1])mod k==0时.即为所寻找的答案.


将这个式子做简单的变换.则可以得到.pre[i] mod k ==pre[j-1] mod k时即为所寻找的答案.


同样利用hash存储每一次答案.


最后的答案即为以每一个位置为数尾的符合条件的子数组个数之和。需要注意的一个边界条件是,我们需要对哈希表初始化,记录mp[0]=1的情况,这样就考虑了前缀和本身被 k 整除的情况。


由于C++没有对负数取模的操作,所以我们需要对负数的模进行处理,具体的如下:

(sum%k)的结果可能为负数,此时进行如下处理(sum%k+k)%k,


即使是远小于K的负数,其对K同余后,其负数同余值的绝对值都要小于K,所以加上K后再对K同余就是其正数的同余值.


举个例子:


(-33%5+5)%5=2


代码:


class Solution {
public:
    int subarraysDivByK(vector<int>& nums, int k) {
        for(int i=1;i<nums.size();i++)
        {
            nums[i]+=nums[i-1];
        }
        unordered_map<int,int>map;
        map[0]=1;
        int res=0;
        for(int i=0;i<nums.size();i++)
        {
            int models=((nums[i]%k+k)%k);
            if(map.find(models)!=map.end())
            {
                res+=map[models];
            }
            map[models]++;
        }
        return res;
    }
};


class Solution {
public:
int subarraysDivByK(vector& nums, int k) {
for(int i=1;i<nums.size();i++)
{
nums[i]+=nums[i-1];
}
unordered_map<int,int>map;
map[0]=1;
int res=0;
for(int i=0;i<nums.size();i++)
{
int models=((nums[i]%k+k)%k);
if(map.find(models)!=map.end())
{
res+=map[models];
}
map[models]++;
}
return res;
}
};


目录
相关文章
|
tengine 虚拟化
在M2 MacBook上编译x86_64架构的Tengine
在M2 MacBook上编译x86_64架构的Tengine
1040 1
|
网络协议 网络架构
NAT 原理与实验操作
NAT 原理与实验操作
|
弹性计算 关系型数据库 MySQL
经济型e实例试用评测
通过几个通俗易懂的入门实验快速认识e实例
48854 3
经济型e实例试用评测
|
存储 Cloud Native NoSQL
etcd 的简介以及发展历史
## 一、简介 etcd 是一个开源、分布式、一致性的键值存储系统。它是由 CoreOS(后来被 Red Hat 收购)开发的,旨在提供一个可靠的分布式协调服务。etcd 通常用于在分布式系统中进行配置管理、服务发现、分布式锁、选举等任务。 etcd 的特点包括: - **分布式一致性**:基于 Raft 共识算法,etcd 确保数据在分布式环境中的一致性和可靠性。 - **键值存储**:提供类似于 NoSQL 数据库的键值对存储功能。 - **高可用性**:通过多节点部署、自动故障转移等方式提高服务的可用性。 - **易于使用**:提供简单的 HTTP 和 gRPC API 进行数据操
438 1
|
安全 网络安全 数据安全/隐私保护
研发国产操作系统的重要使命
众所周知,随着国家科技实力的提升和信息化建设的推进,国产操作系统的研发和推广已经成为了一个非常重要的任务。作为国家信息安全和核心技术的重要组成部分,国产操作系统不仅能够提高我国信息化建设的自主能力,还能够保障我国信息安全和核心技术的安全性和可控性。因此,研发国产操作系统已经成为了一项非常重要的使命。而且经过国产操作系统的不断发展和壮大,越来越多的人开始关注国产操作系统,并对其未来发展充满期待。其中,龙蜥操作系统作为我国自主研发的一款操作系统,已经受到了广泛的关注和认可。那么本文就来聊聊国产操作系统相关的内容。
938 2
研发国产操作系统的重要使命
|
前端开发 JavaScript Java
千帆大模型平台多维度体验总结——平台使用以及接口调用小游戏开发
千帆大模型平台多维度体验总结——平台使用以及接口调用小游戏开发
846 0
|
机器学习/深度学习 算法 Python
学习笔记: 机器学习经典算法-决策树(Decision Tress)
机器学习经典算法-个人笔记和学习心得分享
750 0
|
Oracle Java 关系型数据库
Java 命名规范
包(Package) 的作用是将功能相似或相关的类或者接口进行分组管理,便于类的定位和查找,同时也可以使用包来避免类名的冲突和访问控制,使代码更容易维护。通常,包名使用小写英文字母进行命名,并使用 “.” 进行分割,每个被分割的单元只能包含一个 名词。
358 0
|
SQL 新零售 固态存储
基于Python GUI开发的快递管理系统
基于Python GUI开发的快递管理系统
430 0
基于Python GUI开发的快递管理系统
uniapp实现微信扫二维码进行核销
uniapp实现微信扫二维码进行核销
774 0

热门文章

最新文章