首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LeetCode刷题DAY 25:可被 K 整除数组

难度:中等 关键词:同余定理、哈希表 ⭐️⭐️⭐️⭐️ 1 题目描述 给定一个整数数组A,返回其中元素之和可被 K 整除(连续、非空)数组数目。...如输入 A = [4,5,0,-2,-3,1], K = 5,返回7(因为有7个连续数组可被5整除)。...2 题解 思路:哈希表 本题跟LeetCode刷题DAY 17:k数组较为类似,定义pre(i)为[0,i]内所有元素,则有pre(i)=pre(i-1)+A[i]关系,要找有多少个(pre...(i)-pre(j-1))可被K整除。...在本题中,即有(pre(i)-pre(j-1))|K等同于pre(i)≡pre(j-1)(mod K),因此我们在本题中可以建立哈希表,已余数为键,已该余数出现次数为值,计算哈希表中与pre(i)|K取值一样键对应值即可

42320
您找到你想要的搜索结果了吗?
是的
没有找到

LeetCode 1015. 可被 K 整除最小整数(数学)

题目 给定正整数 K,你需要找出可以被 K 整除、仅包含数字 1 最小正整数 N。 返回 N 长度。如果不存在这样 N,就返回 -1。...示例 1: 输入:1 输出:1 解释:最小答案是 N = 1,其长度为 1。 示例 2: 输入:2 输出:-1 解释:不存在可被 2 整除正整数 N 。...示例 3: 输入:3 输出:3 解释:最小答案是 N = 111,其长度为 3。...提示: 1 <= K <= 10^5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/smallest-integer-divisible-by-k...解题 25倍数显然不能被全是1整除,证明见官网题解 提前取余,避免溢出 (n*10+1)%K = ((n%K)*10+1)%K class Solution { public: int

91120

Leetcode 1010. 总持续时间可被 60 整除歌曲

题目描述 在歌曲列表中,第 i 首歌曲持续时间为 time[i] 秒。 返回其总持续时间(以秒为单位)可被 60 整除歌曲对数量。...示例 1: 输入:[30,20,150,100,40] 输出:3 解释:这三对总持续时间可被 60 整数: (time[0] = 30, time[2] = 150): 总持续时间 180 (...因为每个数字都是正数,不妨数组中每位数字对 60 取余数,这样要求两个数字为 60 或 0 即可,而不再是 60 整数倍。...此时问题变为求和问题,可以以哈希表或者数组形式,存储每个元素值对应出现次数。 一次遍历即可获得最后总对数。...对于元素值为 0 30 情况,其对数个数为 l*(l-1)/2,根据对称性,只需遍历 1~29 情况即可。

55200

【刷题】前缀进阶

适用于对数组有大量重复操作问题,一维预处理较简单,二维比较复杂,画图分析可以顺利解决! 2 Leetcode 560. K 数组 上链接:560....count++; } } return count; } 定睛一看,这这这好像时间复杂度还不如暴力算法啊,这个时间复杂度是O(n^2)...我们来分析一下 假如我们枚举到 第 i 个数字,得到了当前前缀 sum, 那么如果想要得到满足k 数组,就要寻找前缀为 sum - k数组 那么前缀为sum - k数组怎么得到呢?...3 Leetcode 974. 可被 K 整除数组 上链接:974. 可被 K 整除数组 题目描述 这个题目要求我们寻找 可以被 k 整除数组,很好理解。...整体框架与Leetcode 560. K 数组类似,但是如何计算出最长数组。

7810

LeetCode 523. 连续数组(求余 哈希)

题目 给定一个包含非负数数组一个目标整数 k,编写一个函数来判断该数组是否含有连续数组,其大小至少为 2,总和为 k 倍数,即总和为 n*k,其中 n 也是一个整数。...示例 1: 输入: [23,2,4,6,7], k = 6 输出: True 解释: [2,4] 是一个大小为 2 数组,并且为 6。...示例 2: 输入: [23,2,6,4,7], k = 6 输出: True 解释: [23,2,6,4,7]是大小为 5 数组,并且为 42。...解题 类似题目: LeetCode 560. K数组(前缀差分) LeetCode 862. 至少为 K 最短数组(前缀+deque单调栈) LeetCode 974....可被 K 整除数组(哈希map) 对前n个数求和,每次k取余,存入哈希表m[sum%k] = i 再次找到时,表明存在区间k倍数 class Solution { public

48620

LeetCode 2261. 含最多 K 个可整除元素数组

题目 给你一个整数数组 nums 两个整数 k p ,找出并返回满足要求不同数组数,要求子数组中最多 k可被 p 整除元素。...示例 1: 输入:nums = [2,3,3,2,2], k = 2, p = 2 输出:11 解释: 位于下标 0、3 4 元素都可以被 p = 2 整除。...共计 11 个不同数组都满足最多含 k = 2 个可以被 2 整除元素: [2]、[2,3]、[2,3,3]、[2,3,3,2]、[3]、[3,3]、[3,3,2]、[3,3,2,2]、[3,2]、...注意,尽管子数组 [2] [3] 在 nums 中出现不止一次,但统计时只计数一次。 数组 [2,3,3,2,2] 不满足条件,因为其中有 3 个元素可以被 2 整除。...此外,nums 中每个子数组都满足最多 4 个元素可以被 1 整除。 因为所有数组互不相同,因此满足所有限制条件数组总数为 10 。

30130

LeetCode 862. 至少为 K 最短数组(前缀+deque单调栈)

题目 返回 A 最短非空连续数组长度,该数组至少为 K 。 如果没有至少为 K 非空子数组,返回 -1 。...示例 1: 输入:A = [1], K = 1 输出:1 示例 2: 输入:A = [1,2], K = 4 输出:-1 示例 3: 输入:A = [2,-1,2], K = 3 输出:3 提示...: 1 <= A.length <= 50000 -10 ^ 5 <= A[i] <= 10 ^ 5 1 <= K <= 10 ^ 9 来源:力扣(LeetCode) 链接:https://leetcode-cn.com...解题 类似题目: LeetCode 560. K数组(前缀差分) LeetCode 523. 连续数组(求余 哈希) LeetCode 974....可被 K 整除数组(哈希map) 参考官方思路 deque存储前缀下标,队内前缀需要严格单调递增 跟队首差值 >= k 时,记录最小长度,删除队首 ?

43420

LeetCode 周赛上分之旅 #44 同余前缀问题与经典倍增 LCA 算法

统计趣味数组数目(Medium) https://leetcode.cn/problems/count-of-interesting-subarrays/ 题解(同余 + 前缀 + 散列表) 初步分析...: 问题目标: 统计数组中满足目标条件数组; 目标条件: 在数组范围 [l, r] 内,设 cnt 为满足 nums[i] % m == k 索引 i 数量,并且 cnt %...大白话就是算一下有多少数模是 k ,再判断个数模是不是也是 k ; 权重: 对于满足 nums[i] % m == k 元素,它对结果贡献是 1 ,否则是 0 ; 分析到这里,容易想到用前缀实现...return ret } } 复杂度分析时间复杂度: O(n) 线性遍历,单次查询时间为 O(1) ; 空间复杂度: O(m) 散列表空间。...K 数组 974. 可被 K 整除数组 523. 连续数组 525. 连续数组 ---- T4.

27630

【算法专题】前缀

题目数据 保证 数组 nums之中任意元素全部前缀元素后缀乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度内完成此题。...K数组 题目链接 -> Leetcode -560.K数组 Leetcode -560.K数组 题目:给你一个整数数组 nums 一个整数 k ,请你统计并返回 该数组中和为...可被K整除数组 题目链接 -> Leetcode -974.可被K整除数组 Leetcode -974.可被K整除数组 题目:给定一个整数数组 nums 一个整数 k ,返回其中元素之和可被...k 整除(连续、非空) 数组 数目。...连续数组 题目链接 -> Leetcode -525.连续数组 Leetcode -525.连续数组 题目:给定一个二进制数组 nums, 找到含有相同数量 0 1 最长连续数组,并返回该数组长度

9010

TOP-K问题向上调整算法向下调整算法时间复杂度问题分析

TOP-K问题 TOP-K问题:即求数据结合中前K个最大元素或者最小元素,一般情况下数据量都比较大 比如:专业前10名、世界500强、富豪榜、游戏中前100活跃玩家等 对于Top-K问题,能想到最简单直接方式就是排序...= 5; top_k(a, 1000, k); } 向上调整算法向下调整算法时间复杂度 因为堆是完全二叉树,而满二叉树也是完全二叉树,此处为了简化使用满二叉树来证明(时间复杂度本来看就是近似值,...多几个节点不影响最终结果): 我们令高度为h,节点个数n就等于2^(h)-1个 那么在向上调整算法中: 最坏情况下,最后一层节点需要向上移动h-1次,依次类推,就得到总次数表达式,然后再用错位相减法...nh关系就能求出时间复杂度f(n)了 在向下调整算法中: 最坏情况下,倒数第二层节点向下只移动一次,第一层最多移动h-1次 总结下来我们就会发现,向上调整算法中是多节点乘多层数关系,而向下调整算法则是多节点乘少层数关系...,我们进行比较就会发现其实向下调整算法效率更高,所以在平常排序建堆中我们 最常用还是向下调整算法 向上调整算法时间复杂度为: n*log(n) 向下调整算法时间复杂度为: log(n

8510

【优选算法题练习】day8

一、974. 可被 K 整除数组 1.题目简介 974....可被 K 整除数组 给定一个整数数组 nums 一个整数 k ,返回其中元素之和可被 k 整除(连续、非空) 数组 数目(数组 是数组 连续 部分)。...连续数组 给定一个二进制数组 nums , 找到含有相同数量 0 1 最长连续数组,并返回该数组长度。...) e = -1; } //将数组中0转化为-1,这样问题就转变为为0最长连续数组,推测为找为sum最短连续数组 int sum = 0;...K 数组 1.题目简介 560. K 数组 给你一个整数数组 nums 一个整数 k ,请你统计并返回 该数组中和为 k 连续数组个数 。

12220

K数组(LeetCode 560)

文章目录 1.问题描述 2.难度等级 3.热门指数 4.解题思路 方法一:枚举 方法二:前缀 + 哈希表优化 参考文献 1.问题描述 给你一个整数数组 nums 一个整数 k ,请你统计并返回 该数组中和为...考虑以 i 结尾k 连续数组个数,我们需要统计符合条件下标 j 个数,其中 0≤j≤i 且 [j…i] 这个子数组恰好为 k 。...可能有读者会认为假定我们确定了数组开头结尾,还需要 O(n) 时间复杂度遍历数组来求和,那样复杂度就将达到 O(n^3) 从而无法通过所有测试用例。...时间复杂度: O(n^2),其中 n 为数组长度。枚举子数组开头结尾需要 O(n^2) 时间,其中求和需要 O(1) 时间复杂度,因此总时间复杂度为 O(n^2)。 空间复杂度: O(1)。...我们遍历数组时间复杂度为 O(n),中间利用哈希表查询删除复杂度均为 O(1),因此总时间复杂度为 O(n)。 空间复杂度: O(n),其中 n 为数组长度。

16210

LeetCode题解——k 数组

更新一篇发布在力扣上题解,900+watch记录一波,题目链接: https://leetcode-cn.com/problems/QTMn0o/ 解题思路 1、 本题需要求出数组之和为k数组个数...我们可以先统计一下前n项值出现次数,也就是所谓前缀,这里将前缀为0也统计进来: 1) 此时假设k=6,我们肉眼可见数组值为6是【1,2,3】,那么对应到前缀里面就是 3 这个位置,...它其实可以看成 3 - 0 得到区间值; 2) 再假设k=7,那么我们可以发现数组值为7是【3,4】,此时我们可以发现在前缀中没有找到值为7,那么说明该数组起始位置并非0;此时按照滑动窗口思路就应该移动左指针...k数组了。...hash表中寻找键值是sum-k,因为直接寻找k只可以找到那些起始位置为0数组,而寻找sum-k因为我们事先插入了一个0键值,因此这里也不会忽略掉这种情况。

91620

LeetCode-560-K数组

# LeetCode-560-K数组 给定一个整数数组一个整数 **k,**你需要找到该数组中和为 k 连续数组个数。...https://leetcode-cn.com/problems/subarray-sum-equals-k/solution/dai-ni-da-tong-qian-zhui-he-cong-zui-ben-fang-fa-y...]−k 所以我们考虑以i结尾k连续数组个数时只要统计有多少个前缀为 sum[i]−k sum[j]即可。...我们建立哈希表 mp,以为键,出现次数为对应值,记录 sum[i]出现次数,从左往右边更新 mp边计算答案,那么以 i结尾答案 mp[sum[i]−k] 即可在 O(1)时间内得到。...最后答案即为所有下标结尾k数组个数之和。 需要注意是,从左往右边更新边计算时候已经保证了mp[sum[i]−k]里记录 sum[j]下标范围是 0≤j≤i 。

22210

Leetcode 560. K 数组

K 数组 题目描述:给你一个整数数组 nums 一个整数 k ,请你统计并返回 该数组中和为 k 连续数组个数 。...我们可以枚举[0..i]里所有的下标 j 来判断是否符合条件,可能有读者会认为假定我们确定了数组开头结尾,还需要 O(n 时间复杂度遍历数组来求和,那样复杂度就将达到 O(n^3),从而无法通过所有测试用例...枚举子数组开头结尾需要 O(n^2)时间,其中求和需要 O(1) 时间复杂度,因此总时间复杂度为 O(n^2)。 空间复杂度:O(1)。只需要常数空间存放若干变量。...pre[i]−pre[j−1]==k 简单移项可得符合条件下标 jj 需要满足 pre[j−1]==pre[i]−k 所以我们考虑以 i结尾k 连续数组个数时只要统计有多少个前缀为pre...return count; } }; 复杂度分析 时间复杂度:O(n),其中 n 为数组长度。

67730

LeetCode560. K数组

思路 首先想到是暴力求解,双重循环得出所有连续串,但是多半要超时。没想到其他办法。看了题解,学到了前缀概念,这里等于end前缀减去start前缀。...在前缀基础上,结合了hash来优化,也就是两数之和那道题。 两个地方需要注意。一、需要前缀可能出现多次,那么每次都得算上。二、前缀为0也是一种情况,并且是必要,需要手动添加。...题目 给定一个整数数组一个整数 k,你需要找到该数组中和为 k 连续数组个数。...数组中元素范围是 [-1000, 1000] ,且整数 k 范围是 [-1e7, 1e7]。...// 串长度为0(在母串最前面),前缀为0,出现次数+1(原本为0) qzh.put(0, 1); // 前缀 int sum

22120
领券