JAVA笔试题刷题打卡Day1

题目来源

牛客网–》华为2016秋招研发笔试题

题目要求

第一题

在这里插入图片描述

解题(第一次)

思路

在这里插入图片描述

代码

package Practice;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){

            int N = sc.nextInt();
            int M = sc.nextInt();

            ArrayList<Integer> listGrade = new ArrayList<>();
            for (int i = 0; i < N; i++) {
                listGrade.add(sc.nextInt());//下标为i,ID是i+1
            }

            ArrayList<Integer> listMax = new ArrayList<>();
            for (int i = 0; i < M; i++) {

                String str = sc.next();
                char c = str.charAt(0);

                int A = sc.nextInt();
                int B = sc.nextInt();

                if ( c == 'Q' ){
                    if ( A > B ){
                        listMax.add(maxMethod(B, A, listGrade));
                    }else if ( A < B ){
                        listMax.add(maxMethod(A, B, listGrade));
                    }else{
                        listMax.add(listGrade.get(A));
                    }
                }

                if( c == 'U'){
                    listGrade.set( A-1, B);
                }
            }
            for (int i = 0; i < listMax.size(); i++) {
                System.out.println(listMax.get(i));
            }

        }
    }
    public static Integer maxMethod(int Min, int Max, ArrayList<Integer> listGrade ){
        Integer max = 0;
        for (int i = Min-1; i <= Max-1; i++){
            if (max < listGrade.get(i) ){
                max = listGrade.get(i);
            }
        }
        return max;

    }

}

注意的地方

  1. 多组输入,while(sc.hasnext){}必不可少;
  2. ID从1开始,而数组与集合的下标是从0开始,要记得转换;
  3. 常用的代码段包装成方法,更简便;
  4. Scanner里没有直接输入字符的方法,所以要通过这种charAt()的方法输入字符;
String str = sc.next();
char c = str.charAt(0);

犯的错

  1. ID和下标的问题
    • 错误:listMax.add(listGrade.get(A));
    • 正确:listMax.add(listGrade.get(A-1));
  2. 马虎把给的A值当成下标给了listMax
    • 错误:listMax.add(A);
    • 正确:listMax.add(listGrade.get(A-1));

后期改进的想法

通过哈希表提高运算速度,同时将成绩一样的人作为值、ID为键进行储存。

猜你喜欢

转载自blog.csdn.net/weixin_42252770/article/details/88810057