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

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

一、题目描述

二、解题思路

整体思路

由于是求连续区间内元素的和,所以可以用前缀和的思想来做,在具体实现中,无需真的预处理出一个前缀和数组,只需要用一个sum来累加,并用哈希表来统计次数即可。本题思路与leetcode560和为K的子数组一致。

具体思路

(1)枚举出所有以i位置为结尾的和可被K整除的子数组,然后更新i,就可以找出所有和可被i整除的子数组。如图所示:

(2)(sum-x)%k=0,由同余定理可得:sum%k=x%k,即要找出[0,i-1]区间内前缀和对k取模等于sum[i]对k取模的子数组的数量。

(3)为了避免哈希表失真,我们需要对取模操作进行修正,因为在C++中负数对正数取模的结果为负数,但是我们需要的模为非负数,所以int r=(sum%k+k)%k;

三、代码实现

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(n)

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {//前缀和+哈希unordered_map<int,int> hash;//统计前缀和取模k的频次hash[0]=1;int sum=0,ret=0;for(auto x:nums){sum+=x;int r=(sum%k+k)%k;if(hash.count(r)) ret+=hash[r];hash[r]++;}return ret;}
};

http://www.dtcms.com/a/353033.html

相关文章:

  • 【LeetCode 热题 100】287. 寻找重复数——双指针
  • 初始Linux——指令与权限
  • 【大前端】封装一个React Native与Android/IOS 端通用的埋点接口
  • 数据结构(C语言篇):(三)顺序表算法题解析
  • FPGA学习笔记——Verilog中可综合和常见的不可综合的系统函数
  • 数据结构:从堆中删除元素 (Deleting from a Heap)
  • 使用Spring Boot和EasyExcel导出Excel文件,并在前端使用Axios进行请求
  • linux-优化命令
  • Linux笔记11——shell编程基础-5
  • 使用appium对安卓(使用夜神模拟器)运行自动化测试
  • 解释器模式及优化
  • HIVE的Window functions窗口函数【二】
  • flume监控文件写入 Kafka 实战:解耦应用与消息队列的最佳实践
  • 性能测试-jmeter实战6
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(21):文法+单词第7回3
  • 学习嵌入式的第二十八天——线程
  • 趣味学Rust基础篇(变量与可变性)
  • RCLAMP0504M.TBT电子元器件Semtech 低电容、四通道TVS二极管阵
  • Web漏洞
  • More Effective C++条款12:理解抛出一个异常与传递一个参数或调用一个虚函数间的差异
  • 火焰传感器讲解
  • 函数指针的简化
  • 毕业项目推荐:27-基于yolov8/yolov5/yolo11的电塔缺陷检测识别系统(Python+卷积神经网络)
  • MCP模型库深度解析:AI智能体工具调用生态的多元化与规模化发展
  • SciPy科学计算与应用:SciPy图像处理入门-掌握scipy.ndimage模块
  • 1 vs 10000:如何用AI智能体与自动化系统,重构传统销售客户管理上限?
  • 从高层 PyTorch 到中层 CUDA Kernel 到底层硬件 Tensor Core
  • fortran notes[2]
  • More Effective C++ 条款11:禁止异常流出析构函数之外
  • 自学嵌入式第二十九天:Linux系统编程-线程