牛客算法基础noob44——数组计数维护
描述
给定正整数 𝑛n 和阈值 𝑘k 以及长度为 𝑛n 的整数序列 {𝑎1,𝑎2,…,𝑎𝑛}{a1,a2,…,an}。
你需要动态地维护两个正整数变量 𝑆S 和 𝑐𝑛𝑡cnt,初始时,𝑆=𝑐𝑛𝑡=0S=cnt=0。
按照从 11 到 𝑛n 的顺序,对每个下标 𝑖i 执行:
∙ ∙若 𝑎𝑖≥𝑘ai≥k,则 𝑆←𝑆+𝑎𝑖S←S+ai;
∙ ∙若 𝑎𝑖=0ai=0 且 𝑆≥1S≥1,则 𝑆←𝑆−1S←S−1 且 𝑐𝑛𝑡←𝑐𝑛𝑡+1cnt←cnt+1;
∙ ∙否则,不进行任何操作。
输出最终 𝑐𝑛𝑡cnt 的值。输入描述:
第一行输入一个整数 𝑇(1≦𝑇≦104)T(1≦T≦104),表示测试用例组数。
每组测试用例格式如下:
1. 1.第一行输入两个整数 𝑛,𝑘 (1≦𝑛≦50; 1≦𝑘≦100)n,k (1≦n≦50; 1≦k≦100);
2. 2.第二行输入 𝑛n 个整数 𝑎1,𝑎2,…,𝑎𝑛 (0≦𝑎𝑖≦100)a1,a2,…,an (0≦ai≦100).输出描述:
对于每组测试用例,输出一行一个整数,表示 𝑐𝑛𝑡cnt 的值。
import java.util.Scanner;public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner scanner = new Scanner(System.in);// 读取测试用例数量Tint T = scanner.nextInt();// 处理每组测试用例for (int t = 0; t < T; t++) {// 读取n(序列长度)和k(阈值)int n = scanner.nextInt();int k = scanner.nextInt();// 读取序列中的n个整数int[] a = new int[n];for (int i = 0; i < n; i++) {a[i] = scanner.nextInt();}// 初始化变量:S表示积累的资源,cnt表示成功消耗资源的次数int S = 0;int cnt = 0;// 增强型for循环按顺序处理序列中的每个元素//专门用于遍历数组或集合中的元素for (int num:a) { //num依次代表数组a中的每个元素// 情况1:当前元素大于等于阈值k,积累资源到S中if (num >= k) {S += num;}// 情况2:当前元素是0,且有资源可以消耗(S>=1)else if (num == 0 && S >= 1) {S--; // 消耗1单位资源cnt++; // 记录一次成功消耗}// 其他情况:不做任何操作}// 输出当前测试用例的结果System.out.println(cnt);}// 关闭Scannerscanner.close();}
}