前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >523. 连续的子数组和

523. 连续的子数组和

作者头像
编程张无忌
发布于 2021-06-10 01:59:37
发布于 2021-06-10 01:59:37
59000
代码可运行
举报
文章被收录于专栏:悟道悟道
运行总次数:0
代码可运行

给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组: 子数组大小 至少为 2 ,且 子数组元素总和为 k 的倍数。 如果存在,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [23,2,4,6,7], k = 6 输出:true 解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。 示例 2: 输入:nums = [23,2,6,4,7], k = 6 输出:true 解释:[23, 2, 6, 4, 7] 是大小为 5 的子数组,并且和为 42 。 42 是 6 的倍数,因为 42 = 7 * 6 且 7 是一个整数。

如果两个整数m、n满足n-m能被k整除,那么n和m对k同余 即 ( pre(j) - pre (i) ) % k == 0 则 pre(j) % k == pre(i) % k

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public boolean checkSubarraySum(int[] nums, int k) {
         /**
         利用同余定理   
          (a-b)%k==0   可以推出 a%k==b%k
          做前缀和,如果  当前前缀和 - 历史前缀和 %k==0也就是 连续子数组和是k的倍数,那么 当前前缀和%k和历史前缀和%k相等
          */
          int sum[]=new int[nums.length+1];
          sum[0]=0;
          
         for(int i=1;i<=nums.length;i++){
             sum[i]=sum[i-1]+nums[i-1];  //做一个前缀和
         }

         // 前缀和  记录截止的坐标
         HashMap<Integer,Integer> map=new HashMap();
         for(int i=0;i<sum.length;i++){
             if(map.containsKey(sum[i]%k)){  //看下历史前缀和%k是否=当前前缀和%k
                if(i-map.get(sum[i]%k)>=2){
                    return true;
                }
             }else if(!map.containsKey(sum[i]%k)){
                 map.put(sum[i]%k,i);//放进去 当前前缀和%k ,下标
             }
         }
         return false;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 523. 连续的子数组和(求余 哈希)
给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。
Michael阿明
2020/07/13
5330
LeetCode 523. 连续的子数组和(求余 哈希)
560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 class Solution { public int subarraySum(int[] nums, int k) { /** 利用前缀和来做 配合哈希表 前缀和: 当前元素之前的所有元素的和 哈希表里面
编程张无忌
2021/06/10
5910
​LeetCode刷题实战523:连续的子数组和
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
2950
leetcode523. Continuous Subarray Sum
Given a list of non-negative numbers and a target integer k, write a function to check if the array has a continuous subarray of size at least 2 that sums up to a multiple of k, that is, sums up to n*k where n is also an integer.
眯眯眼的猫头鹰
2020/05/11
4510
leetcode刷题(112)——560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
老马的编程之旅
2022/06/22
2440
leetcode刷题(112)——560. 和为K的子数组
525. 连续数组
里面的put(0,-1) 是因为 因为01个数相等就是整个都符合条件,相当于左侧不需要减去,得加上
编程张无忌
2021/06/10
4840
【每日leetcode】47.和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
一条coding
2021/09/15
4940
560. 和为 K 的子数组
一 题目 二 思路: 1.暴力枚举--时间复杂度N2,不推荐,由于存在Nums[i]<0,因此我们需要从每个位置开始到数组最后都进行判断,不可达到目标就提前中值; 2.前缀树-时间复杂度N2,不推荐 先计算出前i项的合,这样加快了暴力破解计算和的过程; 3.前缀树+hash 假设区间[left, right]的和为k,即前right项的和-前left项的和=k,换句话说就是:前left项之和=前right项之和-k. 因此我们可以遍历一遍数组,记录下前i项的和sum,用Map的健存储sum,M
名字是乱打的
2021/12/28
3300
560. 和为 K 的子数组
每日算法系列【LeetCode 523】连续的子数组和
给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。
godweiyang
2020/03/24
1K0
【优先算法】思还故里闾,欲归道无因 - 前缀和
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
用户11369350
2025/01/20
560
【优先算法】思还故里闾,欲归道无因 - 前缀和
LeetCode-560-和为K的子数组
给定一个整数数组和一个整数 **k,**你需要找到该数组中和为 k 的连续的子数组的个数。
benym
2022/07/14
2610
前缀和与差分 Krains 2020-07-28 16:05:15
s[i]=a[0]+a[1]+a[2]+...+a[i−1]s[i] = a[0]+a[1]+a[2]+...+a[i-1]s[i]=a[0]+a[1]+a[2]+...+a[i−1]
Krains
2020/08/05
2840
【算法一周目】从时光的边缘看世界:前缀和揭示的算法真谛
给定一个长度为 n 的整数数组 arr 和 q 个查询,每个查询由两个整数 l 和 r 组成,表示区间 [l, r]。请计算出每个区间内所有元素的和。
HZzzzzLu
2024/12/31
870
【算法一周目】从时光的边缘看世界:前缀和揭示的算法真谛
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day9
题目要求的是 “连续子数组”, 因此此题和排序没关系;题目还要求的是子数组的个数。
苏州程序大白
2022/05/10
2300
【大战蓝桥杯】 算法·每日一题(详解+多解)-- day9
[LeetCode] 523. Continuous Subarray Sum
该文讲述了如何判断一个数组中存在连续子数组的和是k的倍数的情况。通过使用滑动窗口和哈希表的方式,可以高效地判断给定数组中是否存在满足条件的连续子数组。同时,对于最大子数组和的滑动窗口方法,也可以使用哈希表来进行优化。
用户1148830
2018/01/04
8760
和为K的子数组(LeetCode 560)
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
恋喵大鲤鱼
2023/12/13
2220
图解LeetCode——560. 和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。
爪哇缪斯
2023/05/10
2670
图解LeetCode——560. 和为 K 的子数组
前缀和算法详解
和一维的前缀和数组类似,这里需要先预处理出来一个前缀和矩阵 dp[][],dp[i][j] 就表示从(1,1)到(i,j)这个矩阵中的所有元素的和
2的n次方
2024/10/15
1140
前缀和算法详解
<hashmap><双指针>最长子数组长度问题
给定一个无序数组arr,其中元素可正,可负,可0,给定一个整数k。求arr所有的子数组中累加和为k的最长子数组长度。
大学里的混子
2019/02/25
1.6K0
《LeetCode热题100》---<4.子串篇三道>
用户11288958
2024/09/24
1420
《LeetCode热题100》---<4.子串篇三道>
推荐阅读
相关推荐
LeetCode 523. 连续的子数组和(求余 哈希)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验