目录
1. 组队竞赛(编程)
题目链接:组队竞赛_牛客笔试题_牛客网 (nowcoder.com)
题目要求:
题目分析:
上代码
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()) {
int n = scan.nextInt();
int[] array = new int[3*n];
long sum = 0;
for(int i = 0; i < array.length; i++) {
array[i] = scan.nextInt();
}
Arrays.sort(array);
for(int i = 0; i < n; i++) {
sum += array[array.length - 2*(i+1)];
}
System.out.print(sum);
}
}
}
2. 删除公共字符(编程)
题目链接:删除公共字符_牛客题霸_牛客网 (nowcoder.com)
题目要求:
题目分析:
上代码
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str1 = scan.nextLine();
String str2 = scan.nextLine();
HashMap<Character,Integer> map = new HashMap<>();
//1. 将 str2 放入 map 中
for(int i = 0; i < str2.length(); i++) {
//区分 str2 中有无重复的字符
if(map.get(str2.charAt(i)) == null) {
map.put(str2.charAt(i),1);
} else {
//已经有这个字符了,+1
map.put(str2.charAt(i),map.get(str2.charAt(i))+1);
}
}
String ret = "";
//2. 将 str1遍历 和 map 的 value 进行比较为0就输出
for(int i = 0; i < str1.length(); i++) {
if(map.get(str1.charAt(i)) == null) {
ret += str1.charAt(i);
}
}
System.out.print(ret);
}
}
3. toLowerCase的比较
看一下这个例子,如果要用toLowerCase转为小写的字符串中有大写,那是直接new一个对象进行修改,而不是在原来的字符串上进行修改,而原来的字符串还在常量池中,所以修改后的新字符串和之前在常量池中的字符串比较,肯定是false(比较的是地址)
我当时做的时候,想的是toLowerCase大写转小写,转完之后两个肯定相等所以我直接选的是true,却忘了这里比较的是地址,当时看的还是片面了
查询一番后
(1) ==
在基本数据类型中,比较的是两个值的内容是否相等
在引用类型中,比较的是两个对象的地址是否相等
(2)equals()是Object类中的方法
基本数据类型是无法使用equals()方法的
而引用类型中,直接使用Object中的equals()方法,仍然是直接用 == 比较两个对象的内存地址
如果是重写equals方法,那么调用子类重写后的方法可以进行内容或值的比较
String类中就重写了equals方法,比较的是内容
4. 实例为null + 静态方法引用
看代码题还是要仔细啊,之前做时,我刚看见 test 实例对象却为null,然后test就引用了hello()方法,那肯定是错误的啊,想都没想直接选了C,
现在看来,C中都提到了静态方法,那肯定是不要对象啊,当时还是不仔细
静态方法不要对象就能调用!!!
5. 子类继承父类,构造方法的执行
这道题需要知道子类继承父类,子类new自己后,会默认执行子类和父类的构造方法
我当时做的时候,忘了这一点,只看见了 new 父类,执行一次Base,所以选A错了
6. static不能定义为局部变量
这道题的重点是 static修饰成员变量后,就变为了类变量,是不能放在方法内部的
而我当时做这道题,却将重点放在了 j 应该等于几的问题上,当时不仔细自动忽略了static
而且关键是我还选了 j = 2,现在看来,就算去掉static,那么 最后也应该输出的是 j = 1·
7. 抽象方法不能有具体实现
abstract可以修饰方法、修饰类,但就是不能修饰字段
抽象方法不能有具体实现,也就是后面不能带{} ,必须写 ;
8.Constructor是构造方法
当时看到这个题我都傻了 constructor 是啥啊,然后我随便选了一个
后面查询后才知道,constructor就是构造方法啊!!!,之前学的是啥,这都能忘了
在类中构造方法可以省略,A错
构造方法和类同名,而且构造方法也是方法和类同名,B错
类中可以写多个构造方法,D错
构造方法就是在对象new时执行的,选C
9. 排序子序列(编程)
题目链接:排序子序列_牛客笔试题_牛客网 (nowcoder.com)
题目要求:
题目分析:
上代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//1.输入n 和数组A
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] array = new int[n + 1];
for (int i = 0; i < array.length-1; i++) {
array[i] = sc.nextInt();
}
int i = 0;
int count = 0;
//2.比较 找出 (非递减 非递增)
while(i < n) {
if(array[i] < array[i+1]) {
while(i < n && array[i] < array[i+1]) {
i++;
}
count++;
i++;
}else if(array[i] == array[i+1]) {
while(i < n && array[i] == array[i+1]) {
i++;
}
}else {
while(i < n && array[i] > array[i+1]) {
i++;
}
count++;
i++;
}
}
System.out.println(count);
}
}
10.倒置字符串(编程)
题目链接:倒置字符串_牛客题霸_牛客网 (nowcoder.com)
题目要求:
题目分析:
上代码
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
//1.整体转为数组,进行逆置
char[] array = str.toCharArray();
int len = array.length;
reverse(array,0,len-1);
//2.将每个单词进行逆置
int i = 0;
while(i < len) {
int j = i;
while(j < len && array[j] != ' ') {
j++;
}
//走到这里,j就走到了第一个单词空格这里
//只要j还没超出len,就进行交换
if(j < len) {
reverse(array,i,j-1);
// j此时在单词空格位置,而i要走到下一个单词的第一个字母位置
i = j+1;
}else {
//此时i走到最后一个单词位置
reverse(array,i,j-1);
i = j;
}
}
String str1 = new String(array);
System.out.println(str1);
}
private static void reverse(char[] array, int start, int end) {
while(start < end) {
char tmp = array[start];
array[start] = array[end];
array[end] = tmp;
start++;
end--;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/91224.html