链接:组队竞赛__牛客网 (nowcoder.com)
解题思路
该题目就是求所有队员水平的数组中的尽可能大的水平之和
因为每个队伍都是三个人,平均水平值肯定是排序后水平中间的值
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] ary=new int[3*n];
for(int i=0;i<ary.length;i++){
ary[i]=sc.nextInt();
}
maxLevel(ary,n);
}
public static void maxLevel(int[] ary,int n) {
Arrays.sort(ary);//排序
long max = 0;//记录最大水平和
int cur = ary.length - 2;
for (int i = 0; i < n; i++) {
max += ary[cur];
cur -= 2;
}
System.out.println(max);
}
}
总结:
这个题目总体会偏向数学应用题,题目中提出“分组”概念,所以在思想上需要联系到数组进行求解,要想解决问题需要根据题目中的测试用例以及自己给出的测试用例推导出下标公式,在给出公式的基础上进行代码编写。同时注意int和long类型的取值范围。
注意:
在提交过程中可以使用int型进行存储运动员的水平值,但是提交代码后会发现只能通过60%的测试用例,分析用例可以得出:给出的测试用例已经超过了int的范围,所以需要考虑long型进行存储。
删除公共字符
[删除公共字符]输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
删除公共字符_牛客题霸_牛客网 (nowcoder.com)
解题思路
contains() 用于判断集合中是否包含指定的元素。会将括号内的元素和list中存在的元素进行逐个比对,若有相等的,返回结果为true,若没有则返回结果为false。
Java解决问题代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String str = cin.nextLine();// 读取第一行的字符串
String temp = cin.nextLine();// 读取第二行的字符串
for (int i = 0; i < str.length(); i++) {
if (temp.contains(String.valueOf(str.charAt(i))))
continue;// 如果第二行的字符串包含当前的字符就跳过这个字符
else {// 否则就输出对应的字符
System.out.print(String.valueOf(str.charAt(i)));
}
}
}
}