首页 > 其他分享 >Leet code 974 和可被K整除的子数组

Leet code 974 和可被K整除的子数组

时间:2024-03-20 16:30:34浏览次数:23  
标签:Leet code hash int sum ret 974 余数 div

解题思路  同余必定符合条件

我们计算出从第一个位置到后面每个位置的sum

如果给出一段数组nums为 3  4  7  3   k=5

第一个位置sum=3  第二位置sum=7  第三个位置sum=14  第四个位置sum=17

这里7和17余数都为2  17-7=10  10%5=0   这里可以看出余数相同一定之间有解

我们根据思路可以建立 map<int,int> hash  第一个位置存  ((sum%k)+k) % k

为什么要这样写 因为sum可能是负数 这样会影响后续的结果 必须存余数的绝对值

第二个位置存sum的个数 

核心代码

for(int x:nums)

       {

         sum =sum+x;

         div= ((sum%k)+k) % k ;

         if(hash.count(div))  ret + =hash[div]; //存结果

         hash[div]++;

       }

注意   hash[0] = 1  第一个被 k 模为 0 的 sum 需要直接进入if条件加载到结果中 

为什么hash[ div ] ++   

假如数组为5  6  4  数组第一个sum的取余是0  ret + =hash[div]  那么结果就是 子数组5 

hash[div]++ 是为了后续满足条件的sum和前面的数相拼接  第二次拼接子数组为 5 6 4 或者 6 4 这里就有两个 ret就需要+=2 

对于余数不为0的sum  如果有两个以上就可以拼接 所以对于余数不为0的sum

hash都初始化为0    比如sum 6  和  11  都余 1 那么肯定可以拼接 而且ret只+1  

代码如下

class Solution {
public:
    int subarraysDivByK(vector<int>& nums, int k) 
    {
       unordered_map<int,int> hash;
       int sum=0;
       int ret=0;
       int div;
       hash[0]=1;//万一第一个数被K取余为0 也要算入
       for(int x:nums)
       {
         sum =sum+x;
          div= ((sum%k)+k) % k ;
         if(hash.count(div)) ret+=hash[div];
         hash[div]++;
       }
       return ret;
    }
};

标签:Leet,code,hash,int,sum,ret,974,余数,div
From: https://blog.csdn.net/shaoxiebug/article/details/136858765

相关文章

  • VsCode中高效书写Vue3代码的插件
    Vue-Official(原Volar)就是原先的Volar,现已弃用。Vue-Official提供的功能:语法高亮:Vue-Official扩展可以为Vue单文件组件(.vue文件)中的HTML、CSS和JavaScript部分提供语法高亮,使代码更易于阅读和编写。代码片段:Vue-Official扩展提供了丰富的Vue.js相关的......
  • Leecode 二叉树的中序遍历
    Day6第三题这是一道让我崩溃的题,因为一个笔误root.right写成了root.left改了好久。classSolution{publicList<Integer>inorderTraversal(TreeNoderoot){List<Integer>listRoot=newArrayList<Integer>();if(root!=null){listRo......
  • Leecode 盛最多的水
    Day6刷题我的思路:利用两层循环,暴力搜索所有组合的面积,找出最大值。importjava.util.*;classSolution{publicintmaxArea(int[]height){//找height和间距intmaxArea=0,iArea;for(intp1=0;p1<height.length-1;p1++){......
  • vscode大小写快捷键
    实质意义上的使用PHP从去年6月开始的,作为初学者只能从简,省略能省略的,能产出能运行就成。同期使用的IDE是vscode,对不同的语言需安装对应的语法和编译模块觉得很酷,像apt,npm一样。久之,关注点得回到提升编写效率,像大小写转换,以前也就自个手敲两下,反复这么敲也占用专注度,像PHP,常用的PHP......
  • 接雨水 - LeetCode 热题 7
    大家好!我是曾续缘......
  • CodeQL基础
    CodeQL基础及语法安装及环境codeql解析引擎:https://github.com/github/codeql-cli-binaries/releases(可以添加环境变量)SDK:https://github.com/github/codeqlmkdir~/codeql&&cd~/codeqlwgethttps://github.com/github/codeql-cli-binaries/releases/download/v2.8.4/cod......
  • Codeforces Round 935 (Div. 3) A-G
    A传送门  先考虑无解情况,外在人的数量如果%3之后还剩下x人,只能靠第三类综合性人y来补充进去,如果x+y小于3则无解,有解只需要向上取整即可。#include<bits/stdc++.h>usingll=longlong;typedefstd::pair<int,int>PII;typedefstd::array<int,4>ay;constintN=......
  • Leecode 移动零
    Day6刷题我的解题思路:利用双指针,一个指针不断向前移动,表征是否交换完成,另一个指针负责当次交换的位置。classSolution{publicvoidmoveZeroes(int[]nums){//当指针p1指向的元素为0时,将其挪到后面OUT:for(intp1=0;p1<nums.......
  • LeetCode 1161. Maximum Level Sum of a Binary Tree
    原题链接在这里:https://leetcode.com/problems/maximum-level-sum-of-a-binary-tree/description/题目:Giventhe root ofabinarytree,thelevelofitsrootis 1,thelevelofitschildrenis 2,andsoon.Returnthe smallest level x suchthatthesumofa......
  • 350_{"code":401,"msg":"认证失败,无法访问系统资源","data":null}
    若依框架部署Linux访问报错,401认证失败,无法访问系统资源_认证失败,无法访问系统资源_冰糖码奇朵的博客-CSDN博客报错信息链接访问nginx配置解决......