

思路:
这一题,意思是:有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);
}
}
}
}
1925

被折叠的 条评论
为什么被折叠?



