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

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]++;
                    }
                }
            }
        }
    }
}

 

 

相关文章:

  • Docker中安装MySQL--------【详细图解】
  • Vue2函数式组件实战:手写可调用的动态组件,适用于toast轻提示、tip提示、dialog弹窗等
  • 掌握AI营销:移动营销的新动力
  • c++:哈希表
  • GPT-4o推出的原生图像生成功能升级后有点东西!
  • 世界通信大会、嵌入式展及慕尼黑上海光博会亮点回顾
  • 手绘风格流程图工具:简单高效的在线流程图绘制工具
  • C语言复习笔记--指针(1)
  • echarts+HTML 绘制3d地图,加载散点+散点点击事件
  • 2025年SCI1区(TAC) ——语义和情感双重通道用于文本对话情感识别
  • 基于vue框架的智能服务旅游管理系统54kd3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Python学习第二十八天
  • 游戏引擎学习第195天
  • 8.集成模板引擎
  • 【1-1】ICT=IT+CT
  • MySQL GROUP BY分组获取非聚合列值方法
  • [Android汉化] DuckStation of Android:安卓端 Playstation 模拟器(PSX / PSOne)汉化版
  • Open GL ES ->纹理贴图,顶点坐标和纹理坐标组合到同一个顶点缓冲对象中进行解析
  • 视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析
  • C+++题
  • 新华时评:需要“重新平衡”的是美国心态
  • 鲁迅先生儿媳、周海婴先生夫人马新云女士逝世,享年94岁
  • 医学统计专家童新元逝世,终年61岁
  • 腾讯重构混元大模型研发体系:成立大语言和多模态模型部,提升AI长期技术作战能力
  • 商务部新闻发言人就波音公司飞回拟交付飞机答记者问
  • 全过程人民民主研究基地揭牌,为推动我国民主政治建设贡献上海智慧