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

洛谷P11043

洛谷 P11043

目录

  • 题目描述
  • 示例
  • 思路分析
  • 代码段
  • 代码逐行讲解
  • 复杂度分析
  • 总结的知识点
  • 整合
  • 总结

题目描述

(根据题目内容补充)


示例

示例 1

输入:

(输入示例)

输出:

(输出示例)

解释:
(解释示例)


思路分析

问题核心

(简要描述问题的核心要求)

思路拆解

  1. 步骤 1
    • (详细描述第一步的思路)
  2. 步骤 2
    • (详细描述第二步的思路)
  3. 步骤 3
    • (详细描述第三步的思路)

代码段

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] dp = new int[10];
        int x = 0;
        while (sc.hasNext()) {
            String que = sc.next();
            if (que.equals("add")) {
                x = sc.nextInt();
                dp[0]++;
            } else if (que.equals("sync")) {
                x = sc.nextInt();
                dp[x]++;
            } else {
                int min = Integer.MAX_VALUE;
                for (int i = 0; i < n; i++) {
                    min = Math.min(min, dp[i]);
                }
                System.out.println(min);
            }
        }
    }
}

在这里插入图片描述


代码逐行讲解

  1. 输入处理

    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] dp = new int[10];
    int x = 0;
    
    • 使用 Scanner 读取输入的整数 n,并初始化一个大小为 10 的数组 dp 和一个变量 x
  2. 循环处理输入

    while (sc.hasNext()) {
        String que = sc.next();
        if (que.equals("add")) {
            x = sc.nextInt();
            dp[0]++;
        } else if (que.equals("sync")) {
            x = sc.nextInt();
            dp[x]++;
        } else {
            int min = Integer.MAX_VALUE;
            for (int i = 0; i < n; i++) {
                min = Math.min(min, dp[i]);
            }
            System.out.println(min);
        }
    }
    
    • 使用 while 循环不断读取输入,直到没有更多输入为止。
    • 根据输入的指令 que 执行不同的操作:
      • 如果指令是 "add",则读取一个整数 x,并将 dp[0] 的值加 1。
      • 如果指令是 "sync",则读取一个整数 x,并将 dp[x] 的值加 1。
      • 如果指令是其他值,则计算数组 dp 中前 n 个元素的最小值,并输出该最小值。

复杂度分析

时间复杂度

  • 每次循环中,根据指令的不同,时间复杂度也有所不同:
    • "add""sync" 操作的时间复杂度为 O(1)
    • 计算最小值的操作需要遍历数组 dp 的前 n 个元素,时间复杂度为 O(n)
  • 假设总共有 m 条指令,其中 k 条是计算最小值的指令,则总时间复杂度为 O(m + k * n)

空间复杂度

  • 使用了一个大小为 10 的数组 dp,空间复杂度为 O(1)

总结的知识点

  1. 输入处理

    • 使用 Scanner 读取输入,并处理不同类型的指令。
  2. 数组操作

    • 使用数组 dp 来记录不同位置的值,并根据指令进行更新。
  3. 条件判断

    • 使用 if-else 语句根据指令执行不同的操作。
  4. 循环与遍历

    • 使用 while 循环处理多条指令,并使用 for 循环遍历数组计算最小值。

整合

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] dp = new int[10];
        int x = 0;
        while (sc.hasNext()) {
            String que = sc.next();
            if (que.equals("add")) {
                x = sc.nextInt();
                dp[0]++;
            } else if (que.equals("sync")) {
                x = sc.nextInt();
                dp[x]++;
            } else {
                int min = Integer.MAX_VALUE;
                for (int i = 0; i < n; i++) {
                    min = Math.min(min, dp[i]);
                }
                System.out.println(min);
            }
        }
    }
}

总结

掌握如何处理多组输入指令,并根据指令执行不同的操作。


http://www.kler.cn/a/587805.html

相关文章:

  • Redisson 分布式锁全面解析:锁类型(可重入锁、公平锁、联锁、红锁、读写锁)和锁常见方法解读
  • redis删除与先判断再删除的区别
  • deepseek+kimi做ppt教程记录
  • VSCode通过SSH远程登录Windows服务器
  • docker网络问题导致dify添加API不能成功,如添加SearXNG
  • 人工智能之数学基础:如何将线性变换转换为矩阵?
  • 【视频】V4L2、ffmpeg、OpenCV中对YUV的定义
  • Mysql连接---语言连接和图形化界面
  • ssh转发笔记
  • K8S学习之基础三十:k8s的资源访问方式
  • 监控快手关注列表更新以及去视频水印视频
  • 【Linux】多线程互斥问题 和 锁
  • 电脑怎么控制机器人工作
  • 春日轻盈出行,江铃集团新能源易至汽车羿驰05畅行都市
  • 订单超时自动取消功能如何设计
  • C#核心笔记——(五)框架概述
  • STM第三天点亮LED
  • 立体匹配的问题及基本解决思路与流程
  • lua C语言api学习3 lua中调用C语言函数
  • Win11基于anaconda pip安装cx_Oracle库报错ERROR: Failed building wheel for cx_Oracle