昨晚做了华为实习笔试,真的是不做不知道,做了就知道在规定时间内会出现多少问题总结如下:
1. 以前做题总是祈求做完全AC,后面才发现,全AC是比较有难度的,当你改了不能全AC的时候,你就应该做下一题的,因为算通过率的,假入有三道你都做了一部分那么加起来就是比较不错的成绩,如果其他也不会那么就做一道是可以的。
2.给的题目往往都是文字叙述,场景引入与我们平时刷题是很有区别的,需要耐心读题,理解我们可以这样就是先把例子答案输出来你就会有一部分通过率的,说不定很大一部分,只有特殊通不过,所以就是要简化条件限制做出来在添加条件,前提是你不能全部理解题意时候。
3。平时刷题是不需要输入的,而笔试的时候需要我们自己写输入,开始是很不习惯的,故需要多练习同时在java里要注意next(),nextLine(),nextInt()他们的区别及连起用的常见问题。
4.假如你都不会的时候有时候读题意一个简单输出就会有部分通过率。
package coding;
//代码没有全部AC
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String employeeNames = in.nextLine();
//判断最后一个是否逗号结束的
if(employeeNames.charAt(employeeNames.length()-1)==',') {
System.out.println("error.0001");
break;
}else {
String[] names = employeeNames.split(",");
//判断是否名字合法,,这里有问题结尾符号没判断以Tom,Lucy,这种情况没判断
boolean flag = true;
int n = names.length;
for(int j=0;j<names.length;j++) {
if(n<=0 || n>=100) {
System.out.println("error.0001");
flag = false;
break;
}else {
String ss = names[j];
for(int k=0;k<ss.length();k++) {
if(k==0 && !(ss.charAt(k)>='A' && ss.charAt(k)<='Z')) {
System.out.println("error.0001");
flag = false;
break;
}else if(k>0 && !(ss.charAt(k)>='a' && ss.charAt(k)<='z')) {
System.out.println("error.0001");
flag = false;
break;
}else {
continue;
}
}
}
}
if(flag) {
//循环存入集合里统计
HashMap<String, Integer> timesMap = new HashMap<>();
for (int i = 0; i < n; i++) {
String name = names[i];
if (timesMap.containsKey(name)) {
int temp = timesMap.get(name);
timesMap.put(name, temp + 1);
} else {
timesMap.put(name, 1);
}
}
//判断最对票数
int max = 0;
for (String strK : timesMap.keySet()) {
max = Math.max(timesMap.get(strK), max);
}
//统计这个最多票数有多少人
ArrayList<String> ret = new ArrayList<>();
for (String strK : timesMap.keySet()) {
if (timesMap.get(strK) == max) {
ret.add(strK);
}
}
//这里对只有一个直接输出,否则需要加入名字判断规则
if (ret.size() == 1) {
System.out.println(ret.get(0));
} else {
Collections.sort(ret, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//升序排列
return o1.compareTo(o2);
}
});
System.out.println(ret.get(0));
}
}
}
}
}
}
题二:
这题主要是怎么分割好,就实现样例输出,把关键字和后面字符串读入分开,并把后面字符以 ],分割并一步步取出保存
public static void main(String[] args) {
//部分AC
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
String key = sc.next();
String value = sc.next();
String[] str = value.split("],");
int count=0;
for (int i=0;i<str.length;i++) {
String[] s = find(str[i]);
if(key.equals(s[0])) {
count++;
System.out.print(s[1]+" ");
System.out.print(s[2]+" ");
System.out.print(s[3]+"\r\n");
}
}
if (count==0) {
System.out.println("FALL");
}
}
}
private static String[] find(String s) {
if(s.charAt(s.length()-1)==']') {
s = s.substring(0,s.length()-1);
}
StringBuilder sb = new StringBuilder();
String[] stringSplit = s.split(",");
for (int i=0;i<stringSplit.length;i++) {
String ss = stringSplit[i];
for (int j=0;j<ss.length();j++) {
if(ss.charAt(j)=='[') {
sb.append(ss.substring(0,j));
sb.append(",");
} else if (ss.charAt(j)=='=') {
sb.append(ss.substring(j+1,ss.length()));
sb.append(",");
break;
}
}
}
sb.deleteCharAt(sb.length()-1);
String str = sb.toString();
String[] s1 = str.split(",");
return s1;
}