2024年蓝桥杯JavaB组第三题

0分布式队列 - 蓝桥云课

 

思路: 

这一题,意思是:有n个队列,只有一个主队列,add是将元素添加到主队列,sync作用 :followerid​: 表示这是一个同步操作,followerid​ 号副节点会从主节点中同步下一个自己缺失的元素,例如sync 3是将一个元素(与主节点中缺失的一个元素)添加到附节点3号中,query是看所有的节点中都同步的个数。

可能有很多的同步操作,但我们只需在意同步后节点的元素个数即可。再找到所有节点中个数最小的那个数。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class 第三题 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
//将所有的节点组成一个数组,数组中对应的索引是节点的编号,其中0索引设为主节点
		int[]arr=new int[n];
		//快速将这个所有节点数组初始化,都设置为0
		Arrays.fill(arr, 0);
		
		while(sc.hasNextLine()) {
			String s=sc.nextLine();
			String[]s2=s.split(" ");//将字符串转换成String数组
//add进行添加主节点中的元素,每一次add,arr[0]++
			if(s2[0].equals("add")) {
				arr[0]++;//记录主节点的数据个数
			}
//进行同步操作
			if(s2[0].equals("sync")) {
				int index=Integer.parseInt(s2[1]);//将字符型转换成int型
				//这个index是索引,要大于1,因为0是主节点,同时要小于你,避免超出数组范围
				if(index>=1&&index<n) {
					if(arr[index]<arr[0]) {//且副节点中的元素一定是要小于等于主节点的元素个数,只有小于主节点的元素个数时才能进行增加,等于主节点元素个数时,说明没有缺失元素,不用添加
						arr[index]++;
					}
				}
				
			}
			if(s2[0].equals("query")) {
				int min=Integer.MAX_VALUE;//设置最大数,在int型中一定都比这个数小
				for(int i=0;i<n;i++) {//找到最小元素个数的节点,其个数即为“可见性”
					if(min>arr[i]) {
						min=arr[i];
					}
				}
				System.out.println(min);
			}
		}
	}
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值