目录
选择题
- 我们要明确重写和重载的区别,这种是重载
- 重载的子类的方法修饰符要大于等于父类,private除外,其他的参数是一样的
- 成员变量和类变量可以不赋值就使用,但是局部变量不行,会发生编译错误
编程题
import java.lang.*; import java.util.*; public class Main{ public static void main(String []agrs){ Scanner sc =new Scanner(System.in); int n=sc.nextInt(); int []arr=new int[3*n]; long sum=0; for(int i=0;i<3*n;i++){ arr[i]=sc.nextInt(); } Arrays.sort(arr); for(int i=1;i<=n;i++){ sum+=arr[arr.length-2*i]; } System.out.println(sum); } }
- 这题的思路就是怎么分组能确保把每组的最大值相同,分组原则为每次取最小值,然后取未分组的数据的最大值和次大值,那么次大值就是这组的最高水平,那么每组的最高水平的数据应该在排序好数组下标为arr.length-2*i,i从1到n
- 有一个注意的点就是其sum的数据类型应该是long,因为每个成员的最大值能达到10^9,多个成员数据相加的数据可能会大于int的范围
package days.Oneday; import java.util.*; import java.lang.*; public class Main2{ public static void main(String []args){ Scanner sc =new Scanner(System.in); String str1=sc.nextLine(); String str2=sc.nextLine(); HashMap<Character,Integer> map=new HashMap<>(); for(int i=0;i<str2.length();i++){ if(map.get(str2.charAt(i))==null){ //第一次出现 map.put(str2.charAt(i),1); }else{ //不是第一次出现 map.put(str2.charAt(i),map.get(str2.charAt(i))+1); } } String str3=""; for(int i=0;i<str1.length();i++){ if(map.get(str1.charAt(i))==null){ str3+=str1.charAt(i); } } System.out.println(str3); } }
- 巧用Map,统计字符串2中每个字符的数量,如果其数量为0,说明字符串2中没有出现,那么str1出现了这个字符就可以保留
- 有一个注意点就是HashMap<Character,Interger>,我们要明确Interger是一个包装类,如果数量为0,不能用==0判断,应该用==null判断