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

【算法挨揍日记】day15——560. 和为 K 的子数组、974. 和可被 K 整除的子数组

 

 560. 和为 K 的子数组

560. 和为 K 的子数组

题目描述:

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 

子数组是数组中元素的连续非空序列。

 

解题思路:

我们可以很容易想到暴力解法,但是时间复杂度为N^2,我们可以是用前缀和对其优化

 我们可以利用前缀和数组sum来记录,sum【i】代表到i位置的子数组之和

假设这是0-i的数组后面的我们先不看,我们可以将其分成两部分,一部分之和为k,另外一部分为sum【i】-k,本题是求和为k的数组的个数

那问题就可以变为在sum【i】-k中有多少个子数组等于sum【i】-k

这段区间正负都有,子区间可能不只有一个噢!!!

我们可以利用hash来完成本题,一个参数为前缀和,一个参数为次数 ,都是int类型

我们可以利用一个int变量来代替sum数组,因为sum不用每个都记录下来,只要记录上一个位置

解题代码:

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int>hash;hash[0]=1;int ret=0;int sum=0;for(auto x:nums){sum+=x;if(hash.count(sum-k))ret+=hash[sum-k];hash[sum]++;}return ret;}
};

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

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

题目描述:

给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续、非空) 子数组 的数目。

子数组 是数组的 连续 部分。

解题思路:

解决本题我们先来补充两个知识点 

  • 同余定理:(a-b)/p=k....0可以转换为a%p=b%p,具体证明可见同余定理_百度百科 (baidu.com)
  •  C++中,负数(a)%正数(p),在C++负数求余正数正确应该为正数,但是计算结果为负数,我们对其修正时期变成a%p+p,但是为了考虑到正负统一的问题,我们再次进行修正让其变为(a%p+p)%p

接下来我们来看一下本题,本题如果你做了上一题,你会发现基本上是类似的

只不过判断条件不太一样罢了

题目要求的可以被k整除的数组为图中sum-x部分,那就变成(sum-x)%k==0也就变成了sum%k==x%k,也就转为为在【0,i-1】这个区间内有多少个前缀和的余数等于sum%k

解题代码: 

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int,int>hash;hash[0%k]=1;int ret=0;int sum=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.lryc.cn/news/196553.html

相关文章:

  • 数字时代的探索与革新:Socks5代理的引领作用
  • 算法-堆/归并排序-排序链表
  • word 如何编写4x4矩阵
  • INTELlij IDEA编辑VUE项目
  • linux进程间通讯--信号量
  • VS Code连接远程Linux服务器开发c++项目
  • stable diffusion的模型选择,采样器选择,关键词
  • BI零售数据分析:以自身视角展开分析
  • Maven 使用教程(三)
  • 行秋找工作的记录
  • vue项目打包,使用externals抽离公共的第三方库
  • 九阳真经之各大厂校招
  • Go语言入门心法(五): 函数
  • gitignore文件的语法规则
  • vscode提示扩展主机在过去5分钟内意外终止了3次,解决方法
  • 【算法挨揍日记】day16——525. 连续数组、1314. 矩阵区域和
  • k8s-13 存储之secret
  • 什么是高阶成分(HOC)
  • 深度学习硬件配置推荐
  • 数仓建设(一)
  • Springboot整合taos时序数据库TDengine
  • Epoch、批量大小、迭代次数
  • qt-C++笔记之清空QVBoxLayout中的QCheckBox
  • pc微信39223部分算法call偏移
  • 尚硅谷Flink(三)时间、窗口
  • MPLS基础
  • react+antd+Table实现表格初始化勾选某条数据,分页切换保留上一页勾选的数据
  • Linux shell编程学习笔记13:文件测试运算
  • element ui this.$msgbox 自定义组件
  • 尚硅谷Flink(四)处理函数