2024年蓝桥杯Java B组省赛真题超详解析-分布式队列

问题:你需要回答在某个时刻,队列中有多少个元素具有可见性

方案:跟踪每个副节点已经同步到主节点队列的元素数量,并找出所有副节点中同步到的最少元素数量,这个数量即为所有副节点都已经同步的元素数量。

解析:只需要总数量数据的建立和维护,从而进行抽象操作处理

(1)初始化

维护主节点队列的长度 mainQueueSize,初始为0

对于每个副节点,维护一个数组 followerSync,记录每个副节点已经同步到主节点队列的元素数量,初始均为0

(2)处理操作

  1. add element:

主节点队列长度 mainQueueSize 增加1

  1. sync follower_id:

对应副节点的同步数量 followerSync[follower_id] 增加1,但不得超过 mainQueueSize!!

  1. query:

找出所有副节点中已经同步的最少元素数量 minSync

输出 minSync,即当前队列中具有可见性的元素数量。

复制代码
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();

        // index[i] 表示第 i 个节点已同步的最新元素下标,初始为 -1
        int[] index = new int[n];
        Arrays.fill(index, -1);

        while (sc.hasNextLine()) {
            String line = sc.nextLine();
          
            String[] tokens = line.split(" ");
            String s = tokens[0];

            if ("query".equals(s)) {
                int min = Integer.MAX_VALUE;
                for (int i : index) {
                    if (min > i) min = i;
                }
                System.out.println(min + 1);

            } else if ("add".equals(s)) {
                // 添加元素,主节点的索引加一
                int element = Integer.parseInt(tokens[1]);
                index[0]++;

            } else if ("sync".equals(s)) {
                // 同步操作,只有当副节点的索引小于主节点时才能同步
                int followerId = Integer.parseInt(tokens[1]);
                if (followerId >= 1 && followerId < n) {
                    if (index[followerId] < index[0]) {
                        index[followerId]++;
                    }
                }
            }
        }
    }
}
相关推荐
LZQqqqqo1 小时前
C# 中生成随机数的常用方法
java·算法·c#
葵续浅笑1 小时前
LeetCode - 合并两个有序链表 / 删除链表的倒数第 N 个结点
java·算法·leetcode
2301_793086872 小时前
Springboot 04 starter
java·spring boot·后端
seabirdssss5 小时前
错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
java·开发语言
还是鼠鼠5 小时前
tlias智能学习辅助系统--SpringAOP-进阶-通知顺序
java·后端·mysql·spring·mybatis·springboot
君莫笑几人回6 小时前
关于记录一下“bug”,在做图片上传的时候出现的小问题
java·开发语言·spring boot
技术不支持6 小时前
Qt Creator 11.0.3 语法高亮bug问题
java·服务器·数据库·qt·bug
weisian1517 小时前
力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)
算法·leetcode·职场和发展
程序员曦曦7 小时前
15:00开始面试,15:06就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
pointers_syc7 小时前
【设计模式】2.策略模式
java·设计模式·策略模式