牛客网---最高分是多少

  老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
输入描述

输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M <
5000),分别代表学生的数目和操作的数目。 学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为’Q’的时候,
表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。

输出描述

对于每一次询问操作,在一行里面输出最高成绩。

分析及代码
  在这道题中虽然意思一目了然,就是找一个区间内的最大值和更改某个下标的数值。但是其中还是有许多的小坑:

  1. 输入包含多组数据,说明有可能输入多组N,M进行操作
  2. 输入的A和B如果为找最大值操作,二者大小需比较才能确定空间的始末
  3. 题目中告诉你学生的编号是从1到N,数组中的下标是1到N-1

了解了这些坑,我们就来看一下具体代码吧!

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        // 注意题目的第一个坑,可能不止输入一个N,M
        while(sc.hasNext()){
            int N = sc.nextInt();   //学生的数目
            int M = sc.nextInt();   //操作数目

            int[] score = new int[N];
            // 保存学生成绩
            for(int i = 0; i < N; i++){
                score[i] = sc.nextInt();
            }
            // 进行成绩的修改与查询操作
            for(int i = 0; sc.hasNext() && i < M; i++){
                // 在这里由于Scanner中没有nextChar操作,所以我先将这个当作字符串然后转为数组,因为它其中只有一个字符,所以我取了首字符
                // 取这个操作字符的方法不唯一
                char c = sc.next().toCharArray()[0];
                int A = sc.nextInt();
                int B = sc.nextInt();
                // 进行操作
                opeartor(score, c, A, B);
            }
        }
    }
    private static void opeartor(int[] score, char c, int a, int b) {
        if(c == 'Q'){
            // 可能出现所输入编号a,b不确定二者之间的大小
            int begin = (a < b ? a : b) - 1;
            // 考虑编号从1-N,但是数组下标从0-N-1
            int end = a > b ? a : b;
            int max = score[begin]; // 用于记录最大成绩
            for(int i = begin; i < end; i++){
                if(score[i] > max){
                    max = score[i];
                }
            }
            System.out.println(max);
        }
        else if(c == 'U'){
            score[a-1] = b;
        }
    }
}

牛客网上在线OJ运行结果为:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/meng_lemon/article/details/88958381