华为校园招聘2016上机笔试题1
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。 每组输入第一行是两个正整数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
输入
5 7 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 4 5 U 2 9 Q 1 5
输出
5 6 5 9
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner scaner = new Scanner(System.in); 5 while(scaner.hasNext()){ 6 String firsLine = scaner.nextLine(); 7 String[] lineStr = firsLine.split(" "); 8 int N = Integer.parseInt(lineStr[0]); 9 int M = Integer.parseInt(lineStr[1]); 10 11 String secondLine = scaner.nextLine(); 12 String[] numStrs = secondLine.split(" "); 13 int[] scores = new int[N+1]; 14 for(int i = 1;i < N+1;i++){ 15 scores[i] = Integer.parseInt(numStrs[i-1]); 16 } 17 for(int i = 0;i < M;i++){ 18 String line = scaner.nextLine().trim(); 19 String[] strs = line.split(" "); 20 int A = Integer.parseInt(strs[1]); 21 int B = Integer.parseInt(strs[2]); 22 if(strs[0].equals("Q")){ 23 System.out.println(getMax(scores,A,B)); 24 }else if(strs[0].equals("U")){ 25 update(scores,A,B); 26 } 27 } 28 } 29 30 } 31 32 private static int getMax(int[] scores,int from,int to){ 33 if (from > to){ 34 int temp = from; 35 from = to; 36 to = temp; 37 } 38 int max = scores[from]; 39 for(int i = from+1;i <= to;i++){ 40 if(scores[i] > max){ 41 max = scores[i]; 42 } 43 } 44 return max; 45 } 46 47 private static void update(int[] scores,int id,int newScore){ 48 scores[id] = newScore; 49 } 50 }

浙公网安备 33010602011771号