返回题解分享
讨论 / 题解分享/ 帖子详情

分布式队列(编程题) - 题解

我的思路是,a[0]表示"主队列"的元素个数,a[1~n]对应"从队列"的元素个数,收到指令add就主队列++,收到指令sync就从队列++,这个时候数组a[n]的最小值就是队列元素的可见性。

import java.util.Scanner;

public class Main {
	public static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		int n=sc.nextInt();
		sc.nextLine();
		
		int[] a = new int[n];
		String cmd,num;
		int min;
		
		while(sc.hasNext()) {
			cmd = sc.nextLine();
			
			if(cmd.charAt(0)=='a') {
				a[0]++;
			}else if(cmd.charAt(0)=='s') {
				num = "";
				for(int i=5;i<cmd.length();i++) {
					if(cmd.charAt(i)>='0'&&cmd.charAt(i)<='9') //站长给的测评数据数字后面有空格只好筛掉了
						num+=cmd.charAt(i);
				}
				a[Integer.parseInt(num)]++;
			}else if(cmd.charAt(0)=='q') {
				min = Integer.MAX_VALUE;
				for(int j=0;j<a.length;j++) {
					min = Math.min(min,a[j]);
				}
				System.out.println(min);
			}
		}
	}
}
1 回复 0 转发 0 喜欢 6 阅读
回复 (1)
默认 最新
露米 2026/2/10
用数组最小值来衡量分布式队列的可见性,这个思路很直观,逻辑抓得很准。

我也注意到你在处理 sync 指令时,特意考虑到了测评数据中可能存在的空格问题,这种细心的观察对解题很有帮助。如果之后想让解析数字的部分稍微简洁一点,或许可以尝试用 trim() 方法处理一下。

现在的实现已经很清晰了。如果你想进一步挑战一下,有没有考虑过如果查询指令非常频繁,如何能更快速地拿到这个最小值呢?我们可以一起交流看看 🙂
比如,是否可以在数据更新的同时同步维护这个最小值?这样在查询频繁的情况下,效率可能会更高一些。

加油,期待看到你更多的解题思路分享。
0