当前位置: 首页 > article >正文

蓝桥与力扣刷题(蓝桥 k倍区间)

题目:给定一个长度为 N 的数列,A1,A2,⋯AN​,如果其中一段连续的子序列 Ai,Ai+1,⋯Aj( i≤j ) 之和是 K 的倍数,我们就称这个区间[i,j] 是 K 倍区间。

你能求出数列中总共有多少个 K 倍区间吗?

输入描述

第一行包含两个整数 N 和 K( 1≤N,K≤105 )。

以下 N 行每行包含一个整数 AiAi​ ( 1≤Ai≤105 )

输出描述

输出一个整数,代表 K 倍区间的数目。

输入输出样例

示例

输入

5 2
1
2
3
4
5

输出

6

解题思路+代码:(引用题解区 作者:风之理

解题思路

①前缀和:是每一个都是前面累加的(第一个是0+第一个) ②前缀和%K==》可以找到K=0,它一定是K的倍数 ③理解一个东西:任意两个前缀和的差值就是一个区间 ④而前缀和的差值为0,也一定是K的倍数 ⑤(3,3,3,3)---》任意两个组合:(n*(n-1)/2))

代码:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
         long N= sc.nextInt();
         long K= sc.nextInt();
         long sum=0;

         long [] n1=new long[100010];
         long [] n2=new  long[(int) K];

        for (int i = 0; i < N; i++) {
            long s= sc.nextInt();
            n1[i+1]=n1[i]+s;
            n2[(int)(n1[i+1]%K)]++;
        }
        sum +=n2[0];
        for (int i = 0; i < K; i++) {
            sum+=(n2[i]-1)*n2[i]/2;
        }
        System.out.println(sum);
        sc.close();
    }


}

 个人想了这题很久,但是提交代码只能通过两个用例:

总结: 个人认为这题还是有点难,ai之后发现高效的解法需要用到前缀和与哈希表来计算,大家也可参考大佬的解题思路~


http://www.kler.cn/a/570060.html

相关文章:

  • 互联网时代如何保证数字足迹的安全,以防个人信息泄露?
  • 图像采集卡的技术概述
  • PPT 小黑课堂第38套
  • 使用vue3+element plus 的table自制的穿梭框(支持多列数据)
  • Kotlin函数式编程与Lambda表达式
  • 【Go原生】项目入口配置及路由配置写法
  • QEMU源码全解析 —— 内存虚拟化(24)
  • 华为飞腾D2000芯片(基于ARM架构)的欧拉操作系统(openEuler)上部署MySQL
  • springboot gradle 多项目创建
  • Python----线性代数(线性代数基础:标量,向量,矩阵,张量)
  • 【每日学点HarmonyOS Next知识】web内存异常问题、Web高度问题、图片按压效果、加载沙盒中html、感知路由返回传参
  • IP-----BGP协议
  • Ai-web 1.0靶场通关攻略
  • [特殊字符] Django 常用命令
  • MySql面试总结(二)
  • WireGuard搭建网络,供整个公司使用
  • 基于 RK3568 / IMX6ULL / STM32MP157 的智能车载系统
  • 基于YALMIP和cplex工具箱的IEEE33微电网故障处理电网重构matlab模拟与仿真
  • OceanBase接入DeepSeek,AI落地改写行业规则
  • 指针的进阶(提高篇)