CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
之前偶然看到的CSDN也出了竞赛就点了报名,结果今天懒觉起来之后看到提醒才想起来,属于是第一次参加了,有点激动~
活动时间:9月8日-21日(竞赛时间截止9.18)
竞赛考试时间:9月18日 8:30-11:00(作答时间2小时)
获奖名单公布:9月23日
获奖用户信息收集:9月27日
奖品发放:9月30日后7个工作日内
题目描述:X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。
小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)
解题思路:遍历数组,记录“ak”,“m4a1”,“skr”出现的次数即可。
public static int solution(int n, ArrayList<String> vector) {
int result = 0;
Iterator<String> iterator = vector.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if ((s.equals("ak")) || (s.equals("m4a1")) || (s.equals("skr"))) {
result++;
}
}
return result;
}
题目描述:鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个程序统计每年消耗数量最多的鬼画符吗?
解题思路:利用HashMap存储,key为符,value为出现次数,获取最大出现次数,并返回对应的key(题目说明不考虑相同最大值)。
public static String solution(int n, ArrayList<String> vector) {
String result = "";
String[] strArr = new String[n];
vector.toArray(strArr);
HashMap<Object, Integer> hashMap = new HashMap<Object, Integer>();
for (int i = 0; i < strArr.length - 1; i++) {
String k = strArr[i];
if (hashMap.containsKey(k)) {
int count = hashMap.get(k);
hashMap.put(k, count + 1);
} else {
hashMap.put(k, 1);
}
}
Collection<Integer> collection = hashMap.values();
int maxCount = (int) Collections.max(collection);
for (Object key : hashMap.keySet()) {
if (hashMap.get(key).equals(maxCount)) {
result = (String) key;
return result;
}
}
return result;
}
题目描述:已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
解题思路:去头去尾,替换全部"dot"以及首个“at”,再拼头拼尾(结果没过-.-!)。
public String solution(String str) {
StringBuilder sb = new StringBuilder(str);
while (sb.indexOf("dot", 3) != -1 && (sb.indexOf("dot", 3) < sb.length() - 3)) {
sb.replace(sb.indexOf("dot", 3), sb.indexOf("dot", 3) + 3, ".");
}
if (sb.indexOf("at", 2) != -1 && (sb.indexOf("at", 2) < sb.length() - 2)) {
sb.replace(sb.indexOf("at", 2), sb.indexOf("at", 2) + 2, "@");
return String.valueOf(sb);
}
return String.valueOf(sb);
}
题目描述:给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3
解题思路:最长递增子序列,百度一搜一大把。
public static int solution(int n, ArrayList<Integer> arr) {
int result = 0;
if (arr.size() <= 1) {
return arr.size();
}
int tempNum = 1;
arr.add(Integer.MIN_VALUE);
for (int i = 0; i < n; i++) {
int j = i + 1;
if (arr.get(j).compareTo(arr.get(i)) > 0) {
tempNum++;
} else {
result = Math.max(result, tempNum);
tempNum = 1;
}
}
return result;
}
对于我这种菜鸡也能拿90分,说明CSDN的比赛对新手还蛮友好的。但是这个在线IDE真的很难用好吧,还不允许切屏,说实话我感觉赛后对提交代码进行复查都比统计切屏次数来的更科学,下次比赛再见,附一个摸不到头脑的切屏统计… …