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

蓝桥与力扣刷题(蓝桥 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之后发现高效的解法需要用到前缀和与哈希表来计算,大家也可参考大佬的解题思路~

相关文章:

  • JavaScript 系列之:事件
  • 使用Docker搭建Oracle Database 23ai Free并扩展MAX_STRING_SIZE的完整指南
  • C++基础算法:模拟
  • Redis 哨兵模式
  • 本地部署大数据集群前置准备
  • Java中常见的设计模式
  • Qt信号与槽机制
  • 调用的子组件中使用v-model绑定数据以及使用@调用方法
  • 硅基流动前端如何设置tool工具
  • Collab-Overcooked:专注于多智能体协作的语言模型基准测试平台
  • go语言逆向-符号恢复
  • VUE集成Live2d
  • python3使用selenium打开火狐并全屏
  • DeepSeek掘金——DeepSeek-R1图形界面Agent指南
  • LeetCode(必刷75题)151. 反转字符串中的单词——字符串处理
  • 双碳战略下的智慧能源实践:安科瑞储能管理系统助力企业绿色转型
  • Microk8s Ingress实现七层负载均衡
  • 【零基础到精通Java合集】第三集:流程控制与数组
  • Nerf流程
  • Google C++ 开源风格指南
  • 上海位居全球40城科技传播能力第六名
  • 一条铺过11年时光的科学红毯,丈量上海科创的“长宽高”
  • 浙江省委金融办原副主任潘广恩被“双开”
  • 刘国中将出席第78届世界卫生大会并顺访瑞士、访问白俄罗斯
  • 一周文化讲座|“我的生命不过是温柔的疯狂”
  • 网易一季度净利增长三成,丁磊:高度重视海外游戏市场