首页 > 其他分享 >【LeeCode】974. 和可被 K 整除的子数组

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

时间:2023-03-04 15:31:51浏览次数:50  
标签:subarraysDivByK 974 nums int res sum LeeCode new 整除

【题目描述】

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

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

​​​​https://leetcode.cn/problems/subarray-sums-divisible-by-k/​


【示例】

【LeeCode】974. 和可被 K 整除的子数组_System


【代码】admin

代码应该没有问题, 但是【超出时间限制】

 思路: 正常的叠加然后求和进行求余运算 (sum % k)==0

 注意:负数求余为0 所以要多一层计算 (sum % k + k )% k == 0)

package com.company;
// 2023-03-04
import java.util.*;

class Solution {
public int subarraysDivByK(int[] nums, int k) {
int len = nums.length;

int res = 0;
for (int i = 0; i < len; i++){
int sum = 0;
for (int j = i; j >= 0; j--){
sum += nums[j];
if (sum % k == 0 ||(sum % k + k ) % k == 0){
res++;
}
}
}
System.out.println(res);
return res;
}
}
public class Test {
public static void main(String[] args) {
new Solution().subarraysDivByK(new int[]{4,5,0,-2,-3,1}, 5); // 输出: 5
new Solution().subarraysDivByK(new int[]{5}, 9); // 输出: 5
}
}


【代码】​​哈希表 + 逐一统计​

package com.company;
// 2023-03-04
import java.util.*;

class Solution {
public int subarraysDivByK(int[] nums, int k) {
int len = nums.length;
int res = 0;
Map<Integer, Integer> map = new HashMap<>();
// 余数为0的情况
map.put(0, 1);

int count = 0;
int sum = 0;

for (int i = 0; i < len; i++){
// 前缀和
sum += nums[i];
int tmp = (sum % k + k) % k;
// map保存余数的
count = map.getOrDefault(tmp, 0);
res += count;
map.put(tmp, count + 1);
}

System.out.println(map);
System.out.println(res);
return res;
}
}

public class Test {
public static void main(String[] args) {
new Solution().subarraysDivByK(new int[]{4,5,0,-2,-3,1}, 5); // 输出: 5
new Solution().subarraysDivByK(new int[]{5}, 9); // 输出: 5
}
}


【LeeCode】974. 和可被 K 整除的子数组_数组_02

【代码】很巧妙

Math.floorMod(sum, k)

标签:subarraysDivByK,974,nums,int,res,sum,LeeCode,new,整除
From: https://blog.51cto.com/u_13682316/6100093

相关文章

  • 2023.3.4Leecode982按位与为零的三元组
    题目的要求给你一个整数数组nums,返回其中按位与三元组的数目。按位与三元组是由下标(i,j,k)组成的三元组,并满足下述全部条件:0<=i<nums.length0<=j<num......
  • 【LeeCode】820. 单词的压缩编码
    【题目描述】单词数组 ​​words​​ 的 有效编码 由任意助记字符串 ​​s​​​ 和下标数组 ​​indices​​ 组成,且满足:​​words.length==indices.length​​......
  • 【LeeCode】2024. 考试的最大困扰度
    【题目描述】一位老师正在出一场由 ​​n​​​ 道判断题构成的考试,每道题的答案为true(用 ​​'T'​​​ 表示)或者false(用 ​​'F'​​ 表示)。老师想增加学生对自......
  • 【LeeCode】957. N 天后的牢房 -- todo
    【题目描述】监狱中 ​​8​​ 间牢房排成一排,每间牢房可能被占用或空置。每天,无论牢房是被占用或空置,都会根据以下规则进行变更:如果一间牢房的两个相邻的房间都被占用或......
  • 【LeeCode】剑指 Offer II 088. 爬楼梯的最少成本-- todo
    【题目描述】数组的每个下标作为一个阶梯,第 ​​i​​​ 个阶梯对应着一个非负数的体力花费值 ​​cost[i]​​​(下标从 ​​0​​ 开始)。每当爬上一个阶梯都要花费对......
  • 《信息安全数学基础》第一章:整除与同余——知识点梳理
    整除(easy)整除定义若\(\foralla,b\inZ,b\ne0,\existsq\inZ.\s.t.\a=qb.\)则称:\(b\)整除\(a\),或\(a\)被\(b\)整除,记为:\(b\mida\)\(b\)不整除\(a\):\(......
  • P8711 [蓝桥杯 2020 省 B1] 整除序列
    题目传送门题目大意有一个序列,序列的第一个数是\(n\),后面的每个数是前一个数整除\(2\),请输出这个序列中值为正数的项。解题思路序列的第一个数为\(n\),所以可以先直......
  • 【LeeCode】424. 替换后的最长重复字符
    【题目描述】给你一个字符串 ​​s​​​ 和一个整数 ​​k​​​ 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 ​​k​​ ......
  • 【LeeCode】1208. 尽可能使字符串相等
    【题目描述】给你两个长度相同的字符串,​​s​​​ 和 ​​t​​。将 ​​s​​ 中的第 ​​i​​ 个字符变到 ​​t​​ 中的第 ​​i​​ 个字符需要 ​​|s[i......
  • 【230221-3】证明:3^1980+4^1981可被5整除
    ......