当前位置: 首页 > 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.xdnf.cn/news/1378315.html

相关文章:

  • 集成电路学习:什么是YOLO一次性检测器
  • 关于国产 RAC 和分布式研讨
  • 【Python学习笔记】whl包打包
  • Day14——JavaScript 核心知识全解析:变量、类型与操作符深度探秘
  • Redis实战-优惠券秒杀解决方案总结大全
  • XC6SLX75-2FGG484C Xilinx Spartan-6 LX FPGA
  • 电子电气架构 --- 软件项目复杂性的驾驭思路
  • 基于Prometheus Pushgateway与Alertmanager的自定义指标监控与告警实践指南
  • C语言 | 高级C语言面试题
  • C语言二级考试环境配置教程【window篇】
  • 数学建模——马尔科夫链(Markov Chain Model)
  • Linux初始——基础指令篇
  • 数据结构:从堆中删除元素 (Deleting from a Heap)
  • 微服务-30.配置管理-动态路由
  • 3 无重复字符的最长子串
  • 第二阶段Winfrom-8:特性和反射,加密和解密,单例模式
  • Gopher URL协议与SSRF二三事
  • 入门概念|Thymeleaf与Vue
  • 路由基础(二):路由表和FIB表
  • Day7--HOT100--54. 螺旋矩阵,48. 旋转图像,240. 搜索二维矩阵 II
  • 【JAVA实现websocket】
  • Java设计模式之《外观模式》
  • 大模型安全概述、LlamaFirewall
  • 深度学习---卷积神经网络CNN
  • Git-远程操作
  • AI-Agent 深度科普:从概念到架构、应用与未来趋势
  • JVM之【Java对象在内存中的结构】
  • Linux--->网络编程(TCP并发服务器构建:[ 多进程、多线程、select ])
  • Linux 系统调优与CPU-IO-网络内核参数调优
  • MySQL InnoDB vs MyISAM