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

分布式队列(java)

emm,看这个题的头一眼让吓住了

给我看的一头雾水

看了一下解析,我靠,简直是天才,我丢

这道题的关键在于找出最少元素的节点

然后输出他的元素个数

在子节点同步的时候需要注意

如果他的元素个数增加后的个数

用一维数组来存储每个节点的元素个数

n个节点

一定要小于等于主节点的元素个数

因为在输入n之后要输入多行,

无法得知输入多少个结束

使用while循环来接收输入

判断条件就是看是否有下一个输入

in.hasnext()

在此之前需要用in.nextLine()来吃掉in,nextInt()接收的n后面的换行

然后先接收字符串op用来判断是哪一个操作

如果是add 操作的话后面还需要接收输入的数字

但是实际上不用管这个数字只要让主节点的元素个数+1就行了

老师在吓唬我们

同步的时候也需要接收节点的下标

节点的同步某个节点的时候某个节点的元素个数+1之后的个数一定是要小于等于主节点的元素个数

主节点的元素个数是一定要大于等于同步之后的某个节点的元素个数的

也就是Math.min(cnt[i1]+1,cnt[0])

如果查询的话就直接先便利数组

从数组中找出元素个数最小的那个,然后记录

便利完之后输出

ok,写一遍

一写就拉跨了

有问题的代码:

package Lanqiao;

import java.util.Map;
import java.util.Scanner;

/**
 * @author zb
 * date2025/3/27 21:48
 */
public class L19723 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int cnt[] = new int[n];
        in.nextLine();
        while (in.hasNext()){
            String  op = in.next();
            if(op.equals("add")){
                int num = in.nextInt();
//                主节点的元素个数++
                cnt[0]++;
//                System.out.println("cnt[0]++  "+cnt[0]);
            }
            else if (op.equals("sync")){
                int pos = in.nextInt();
//              同步pos节点的元素个数
                cnt[pos] = Math.min(cnt[0],cnt[pos]++);
//                System.out.println(pos+"  "+cnt[pos]);
            }else {
//                查询
                int min = Integer.MAX_VALUE;
                for (int i = 0; i < n; i++) {
                    if(cnt[i]<min){
                        min  =cnt[i];
                    }
                }
                System.out.println(min);

            }
        }

        in.close();
    }
}

无奖竞猜:

猜一下问题在哪里?

思路都是没有问题的

打印了一下突然想明白是这里

cnt[pos]++的话是后加,先比较

那么每次都是0 和主节点的个数在作比较

每次肯定都是0 ,这没问题把

            
            else if (op.equals("sync")){
                int pos = in.nextInt();
//              同步pos节点的元素个数
                cnt[pos] = Math.min(cnt[0],cnt[pos]++);
//                System.out.println(pos+"  "+cnt[pos]);
            }

再也不写骚操作了,写成++cnt[pos]就对了

建议写成cnt[pos]+1



import java.util.Map;
import java.util.Scanner;

/**
 * @author zb
 * date2025/3/27 21:48
 */
public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int cnt[] = new int[n];
        in.nextLine();
        while (in.hasNext()){
            String  op = in.next();
            if(op.equals("add")){
                int num = in.nextInt();
//                主节点的元素个数++
                cnt[0]++;
//                System.out.println("cnt[0]++  "+cnt[0]);
            }
            else if (op.equals("sync")){
                int pos = in.nextInt();
//              同步pos节点的元素个数
                cnt[pos] = Math.min(cnt[0],cnt[pos]+1);
//                System.out.println(pos+"  "+cnt[pos]);
            }
            else {
//                查询
                int min = Integer.MAX_VALUE;
                for (int i = 0; i < n; i++) {
                    if(cnt[i]<min){
                        min  =cnt[i];
                    }
                }
                System.out.println(min);

            }
        }

        in.close();
    }
}

相关文章:

  • UML 图六种箭头含义详解:泛化、实现、依赖、关联、聚合、组合
  • 【力扣hot100题】(005)三数之和
  • CrossNorm与SelfNorm的具体实现
  • 【Python】编程50个经典操作
  • 向量数据库的适用场景与局限性分析
  • R²AIN SUITE 助力医药企业服务管理数智化转型
  • jmeter 镜像构建
  • PostgreSQL: GIN 索引详解
  • 详解c++中的可调用对象,std::function、Lambda表达式、std::bind等
  • AQUA爱克泳池设备从水质安全到舒适体验,全链路护航小区泳池健康
  • npm install 卡在创建项目:sill idealTree buildDeps
  • 使用react 引入相对路径文件
  • Golang Beego SQL链式查询(包含Join关联)
  • Git 之配置ssh
  • Python与面向对象编程的七大核心概念:解析与示例
  • 一周掌握Flutter开发--8. 调试与性能优化(下)
  • 内网渗透-CS免杀与应用开发
  • 操作系统实验7 显示进程列表
  • 中科亿海微SoM模组——AI图像推理解决方案
  • 金融级密码管理器——抗内存扫描的密钥保险箱
  • 太原网站的优化/短信广告投放
  • 广州网站手机建设公司/点击软件
  • 企业网站管理系统破解版/软文营销范文
  • 门户网站策划书/重庆seo整站优化外包服务
  • 荥阳网站建设/关键词优化哪家强
  • 淘宝上买的网站模板怎么建设网站/长沙seo排名优化公司