leetcode 974. 和可被 K 整除的子数组

目录

  • 题目描述:
  • 示例:
  • 解法:

题目描述:

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

示例:

输入:A = [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]

提示:

  • 1 <= A.length <= 30000
  • -10000 <= A[i] <= 10000
  • 2 <= K <= 10000

解法:

class Solution {
public:
    int subarraysDivByK(vector<int>& A, int K) {
        vector<int> mp(K, 0);
        mp[0] = 1;
        int pre = 0;
        int res = 0;
        for(int val : A){
            pre += val;
            pre %= K;
            if(pre < 0){
                pre += K;
            }
            res += mp[pre];
            mp[pre]++;
        }
        return res;
    }

    int subarraysDivByK2(vector<int>& A, int K) {
        unordered_map<int, int> mp;
        int pre = 0;
        mp[0] = 1;
        int res = 0;
        for(int val : A){
            pre += val;
            for(auto it : mp){
                if((pre - it.first) % K == 0){
                    res += it.second;
                }
            }
            if(mp.find(pre) != mp.end()){
                mp[pre]++;
            }else{
                mp[pre] = 1;
            }
        }
        return res;
    }
};

原文地址:https://www.cnblogs.com/zhanzq/p/11063625.html

时间: 2024-11-11 16:59:30

leetcode 974. 和可被 K 整除的子数组的相关文章

[LeetCode] Shortest Unsorted Continuous Subarray 最短无序连续子数组

Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You need to find the shortest such subarray and output its length. E

和至少为K的最短子数组

返回 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] Largest Divisible Subset 最大可整除的子集合

Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj % Si = 0. If there are multiple solutions, return any subset is fine. Example 1: nums: [1,2,3] Re

LeetCode 152. Maximum Product Subarray (最大乘积子数组)

Find the contiguous subarray within an array (containing at least one number) which has the largest product. For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the largest product = 6. 题目标签:Array, Dynamic Programming 题目给了我们一个nu

Leetcode 1022. 可被 K 整除的最小整数

1022. 可被 K 整除的最小整数 显示英文描述 我的提交返回竞赛 用户通过次数74 用户尝试次数262 通过次数75 提交次数1115 题目难度Medium 给定正整数 K,你需要找出可以被 K 整除的.仅包含数字 1 的最小正整数 N. 返回 N 的长度.如果不存在这样的 N,就返回 -1. 示例 1: 输入:1 输出:1 解释:最小的答案是 N = 1,其长度为 1. 示例 2: 输入:2 输出:-1 解释:不存在可被 2 整除的正整数 N . 示例 3: 输入:3 输出:3 解释:最小

给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2<=n<=1000),a(2<=a<=1000) 输出: 一个整数. 样例输入: 6 10 样例输出: 1 这个题首先如果数字小的话是可以考虑轮流试的,但是1000的数字范围无论是对阶乘还是幂都太大了.于是我们想一下,既然要求整除,说明每个素因子都是可以抵消的,这样我们就可以求解了.但是还要考虑到,因为后面是求哪个k,所以说我们不是对n!和a的幂分别求出对应的素数因子数组.我

能被 K 整除的最大连续子串长度

[来源]网上流传的2017美团秋招笔试题 [问题描述] 两个测试样例输出都是5 [算法思路] 暴力解法时间会超限,使用一种很巧妙的数学方法.用在读取数组arr时用数组sum记录其前 i 项的和,即 sum[i] = arr[1]+arr[2]+...+arr[i].利用这一个数学性质:假设前m项之和被 K 除后余数是 x, 前n项之和被 K 除后余数也是 x, 则m+1-n的子序列之和肯定能被K整除. [代码] 1 #include<iostream> 2 #include<algori

【Leetcode长征系列】Merge k Sorted Lists

原题: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思路:两条两条地合并.时间复杂度为O(n),n为所有链表节点和. 代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :

leetcode排列,求第k个排列

stl 中的下一个排列在写一遍忘了 写个1个多小时,使用递归写的,错误就在我使用一个list保存当前剩下的数,然后利用k/(n-1)!的阶乘就是删除的数字,但进过观察, 比如 list={1,2,3} 分成3组: 1  {2,3} 2 {1,3} 3 {1,2} 确定位于哪个组,然后确定位于哪个组的第几个nyoj 511. 求第3个排列   ,3%2=1,删除 list就是第3个数3,其实呢是第2个树2 ,所以   计算方法为 (k-1)/(n-1)! 另外一个对于下一组,k%(n-1)!也不行