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

吉林网站开发公司友情链接购买平台

吉林网站开发公司,友情链接购买平台,北京app开发多少钱,怎样设计一个移动网站题目链接 Leetcode.974 和可被 K 整除的子数组 rating : 1676 题目描述 给定一个整数数组 n u m s nums nums 和一个整数 k k k ,返回其中元素之和可被 k k k 整除的(连续、非空) 子数组 的数目。 子数组 是数组的 连续 部分。 示例 1&…

题目链接

Leetcode.974 和可被 K 整除的子数组 rating : 1676

题目描述

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

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

示例 1:

输入:nums = [4,5,0,-2,-3,1], k = 5
输出:7
解释:
有 7 个子数组满足其元素之和可被 k = 5 整除:
[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]

示例 2:

输入: nums = [5], k = 9
输出: 0

提示:
  • 1 ≤ n u m s . l e n g t h ≤ 3 ∗ 1 0 4 1 \leq nums.length \leq 3 * 10^4 1nums.length3104
  • − 1 0 4 ≤ n u m s [ i ] ≤ 1 0 4 -10^4 \leq nums[i] \leq 10^4 104nums[i]104
  • 2 ≤ k ≤ 1 0 4 2 \leq k \leq 10^4 2k104

解法:前缀和 + 哈希表

我们假设 [ j , i ] [j,i] [j,i] 区间的子数组元素和可以被 k k k 整除,即 :

( n u m s [ j ] + n u m s [ j + 1 ] + . . . + n u m s [ i − 1 ] + n u m s [ i ] ) m o d k = 0 (nums[j] + nums[j + 1] + ... + nums[i-1] + nums[i])\ mod\ k = 0 (nums[j]+nums[j+1]+...+nums[i1]+nums[i]) mod k=0

我们用 s u m sum sum 表示 n u m s nums nums 的前缀和数组,可将上式转换为:

( s u m [ i ] − s u m [ j − 1 ] ) m o d k = 0 (sum[i] - sum[j-1])\ mod\ k = 0 (sum[i]sum[j1]) mod k=0

再转换一下得到:

s u m [ j − 1 ] m o d k = s u m [ i ] m o d k sum[j-1]\ mod\ k= sum[i]\ mod\ k sum[j1] mod k=sum[i] mod k

那么以 n u m s [ i ] nums[i] nums[i] 为结尾的数组,我们只需要统计前面等于 s u m [ j − 1 ] m o d k sum[j-1]\ mod\ k sum[j1] mod k 也就是 s u m [ i ] m o d k sum[i]\ mod\ k sum[i] mod k 的数量 t t t 即可。

那么这个 t t t 就是以 n u m s [ i ] nums[i] nums[i] 为结尾的数组中 和能被 k k k 整除的子数组的数量。

我们只需要对每一个 n u m s [ i ] nums[i] nums[i] 都加上 t t t 即可,这样我们就可以统计出所有的 和能被 k k k 整除的子数组的数量。

在实现上,我们使用哈希表来记录前缀和出现的次数。初始时,和为 0 0 0 ,也需要统计它的出现次数,即 { 0 , 1 } \{ 0 , 1 \} {0,1}

注意:由于 n u m s nums nums 中存在负数,所以 s u m m o d k sum\ mod\ k sum mod k 仍然有可能是负数,所以我们要将其转换为正数,即:

k e y = ( s u m m o d k + k ) m o d k key = (sum\ mod\ k + k)\ mod\ k key=(sum mod k+k) mod k

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

C++代码:

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {int n = nums.size();int ans = 0 , sum = 0;unordered_map<int,int> cnt{{0,1}};for(int i = 0;i < n;i++){sum += nums[i];auto key = (sum % k + k) % k;ans += cnt[key];cnt[key]++;}return ans;}
};
http://www.hkea.cn/news/887660/

相关文章:

  • 网站营销与推广策略百度一下官网首页百度
  • 网站建设张世勇100个免费推广b站
  • 网络营销的常用工具百度关键词优化点击 教程
  • 公司网站要怎么做少儿编程培训机构排名前十
  • 一个好的网站是什么样的商家联盟营销方案
  • 网站解除域名绑定网站广告收费标准
  • 郑州的建设网站有哪些手续免费发布推广信息的平台有哪些
  • 手机做网站软件优化服务平台
  • 网站图片装修的热切图怎么做营销技巧培训
  • 可以上传图片的网站怎么做百度关键词点击
  • 泉州网站制作广州seo网站开发
  • cuntlove wordpressseo外链发布工具
  • 购买一个网站空间如何可以多个域名使用吗长沙网站建设服务
  • 天津市建设委员会网站上海网站制作开发
  • 扬中网站建设墨子学院seo
  • 分析电子商务网站建设需求教案青岛今天发生的重大新闻
  • 汕头模板开发建站百度发布信息怎么弄
  • 健身网站开发项目总结关键词筛选工具
  • 重庆网站建设零臻靠谱国内永久免费的云服务器
  • 软件库合集软件资料2024郑州百度快照优化
  • 房地产开发公司网站建设方案seo去哪里学
  • 做网站可以赚钱吗百度小说搜索风云排行榜
  • 做网站交接需要哪些权限网站seo视频教程
  • 在网站怎么做收款二维码刷移动关键词优化
  • 问信息奥赛题怎么做 去哪个网站互联网网络推广
  • b2c电子商务网站系统下载专业网站seo推广
  • 引流推广的方法seo诊断工具
  • 平阴县建设工程网站直通车推广怎么做
  • 网站开发外包不给ftp高佣金app软件推广平台
  • 太原适合网站设计地址百度用户服务中心客服电话