您的位置:首页 > 编程语言

2016年华为校招机试题

2016-09-22 11:04 78 查看
//老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

//输入描述:

//

//输入包括多组测试数据。

//每组输入第一行是两个正整数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。

//

//

//

//输出描述:

//

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

//

//

//输入例子:

//

//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

好久没刷题了,程序员之路漫漫,今天华为机试,求好运。

import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int M = in.nextInt();//学生的数目
int N = in.nextInt();//操作的数目
int[] arr = new int[M];
for(int i=0;i<M;i++){
arr[i] = in.nextInt();
}

ArrayList<Integer> array = new ArrayList();
for(int j=0;j<N;j++){
String ope = in.next();
int a = in.nextInt();
int b = in.nextInt();
int res =getProcess(arr,a,b,ope);
if(res!=-1){
array.add(res);
}

}

for(int i= 0;i<array.size();i++){
System.out.println(array.get(i));
}
}
}

public static int getProcess(int[] a, int i, int j, String s){

if(s.equals("Q")){
if(i>j){
int temp=i;
i=j;
j=temp;

}
int max=a[i-1];
for(int k=i-1;k<=j-1;k++){
if(a[k]>=max){
max = a[k];
}
}
return max;
}else{
a[i-1]=j;
return -1;
}
}
}


遇到的问题:主要是在判断A和B大小的问题上。当求最大值操作时,需要关注下左右边的大小。如果A>B时,需要将A,B互换。但是更新操作不需要关注A,B的大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为 编程