今天进行了一场Java笔试我感觉题目都挺简单的
用java语言完成下面题目的编写并运行输出结果(可以用在线编程网站,或者自己本地的编程软件编写代码)
1.给定三个List,编写一个方法删除所有重复的字符串,并保持原有顺序不变。 测试数据:["apple" "banana", “apple" "orange" , "banana", "grape", "grape"] 输出:["apple",“banana", "orange", "grape"]
2.给定一个Mapsstring,Integer>,其中键是名字,值是年龄。编写一个方法找出年龄最大的三个人的名字。 测试数据:{"John*:35, "Bob": 40, "Alice": 30, "Tom": 45, "Jerry":50} 输出:["Jerry"],
3.编写一二个方法,接收一个List,返回一个Map,其中键是列表中的字符串,值是该字符串在列表中出现的次数。 测试数据:["apple",“banana" "apple" "orange" “banana",*grape", "grape"] 输出:{"apple":2, "banana": 2, "orange": 1, "grape": 2}
4.给定一个ListsString 测试数据:【#123", 输出:数字列表:[”123, 5.给定一个Map<String,List<Integer》〉 ,键是学生的名字,值是他们的成绩列表。编写一个方法,返回一个新的Map,键是学生的名字,值是他们的平均成绩。 测试数据:{"John”:[85,90,95], *Bob": [80,85, 9e],〝Alice": [95, 100, 105]) “Bob”: 85.9, "Alice":100.0} 6.给定一个List,每个字符串都是一个由逗号分隔的名字和电子邮件地址(例如,“JohnDoe,john@doe.com")。编写一个方法,将这个列表转换为一个Map,其中键是电子邮件地址,值是对应的名字。 测试数据:["John Doe,john@doe.com", "Bob Smith, bob@smith.com", "Alice Johnson, alice@johnson.com"] "bob@smith.com": "Bob Smith", "alice@johnson.com": "Alice Johnson"]
1. 删除重复字符串
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "apple", "orange", "banana", "grape", "grape");
System.out.println(removeDuplicates(list));
}
public static List<String> removeDuplicates(List<String> list) {
Set<String> seen = new LinkedHashSet<>(list);
return new ArrayList<>(seen);
}
}
2. 找出年龄最大的三个人的名字
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, Integer> ages = new HashMap<>();
ages.put("John", 35);
ages.put("Bob", 40);
ages.put("Alice", 30);
ages.put("Tom", 45);
ages.put("Jerry", 50);
System.out.println(findTopThreeAges(ages));
}
public static List<String> findTopThreeAges(Map<String, Integer> map) {
PriorityQueue<Map.Entry<String, Integer>> maxHeap = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
maxHeap.addAll(map.entrySet());
List<String> topThree = new ArrayList<>();
for (int i = 0; i < 3 && !maxHeap.isEmpty(); i++) {
topThree.add(maxHeap.poll().getKey());
}
return topThree;
}
}
3. 统计字符串出现次数
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "apple", "orange", "banana", "grape", "grape");
System.out.println(countOccurrences(list));
}
public static Map<String, Integer> countOccurrences(List<String> list) {
Map<String, Integer> counts = new HashMap<>();
for (String s : list) {
counts.put(s, counts.getOrDefault(s, 0) + 1);
}
return counts;
}
}
4. 提取数字列表(此题未提供完整要求,假设为提取字符串中的数字)
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
List<String> list = Collections.singletonList("#123");
System.out.println(extractNumbers(list));
}
public static List<String> extractNumbers(List<String> list) {
Pattern pattern = Pattern.compile("\\d+");
List<String> numbers = new ArrayList<>();
for (String s : list) {
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
numbers.add(matcher.group());
}
}
return numbers;
}
}
5. 计算学生平均成绩
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, List<Integer>> scores = new HashMap<>();
scores.put("John", Arrays.asList(85, 90, 95));
scores.put("Bob", Arrays.asList(80, 85, 90));
scores.put("Alice", Arrays.asList(95, 100, 105));
System.out.println(calculateAverageScores(scores));
}
public static Map<String, Double> calculateAverageScores(Map<String, List<Integer>> map) {
Map<String, Double> averages = new HashMap<>();
for (Map.Entry<String, List<Integer>> entry : map.entrySet()) {
double sum = 0;
for (int score : entry.getValue()) {
sum += score;
}
averages.put(entry.getKey(), sum / entry.getValue().size());
}
return averages;
}
}
6. 转换名单到邮箱映射
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> emails = Arrays.asList("John Doe,john@doe.com", "Bob Smith,bob@smith.com", "Alice Johnson,alice@johnson.com");
System.out.println(convertToEmailMap(emails));
}
public static Map<String, String> convertToEmailMap(List<String> list) {
Map<String, String> emailMap = new HashMap<>();
for (String s : list) {
String[] parts = s.split(",");
emailMap.put(parts[1].trim(), parts[0].trim());
}
return emailMap;
}
}
7.Java算法题(较难)
按照如下的步骤处理输入:1.给定一个数组A[0,1...n-1],请构建一个数组B[0,1...n -1],其中B助的值是数组A中除了下标i以外的元素的和,然后再乘以3。2.对一个整数数组,使得数组中的每个元素只出现3次,将新数组从小到大排列后返回3.对一个整数数组,如果数组长度为O,返回6;如果数组长度为奇数,则取其中间7个元素,求和后返回;否则,取其中间6个元素求和后返回
public static int answer(int[] x) {
return
}
答案:
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] x = {1, 2,3,4,5,6,7};//输入的数据
int result = answer(x);
System.out.println(result);
}
public static int answer(int[] x) {
int totalSum = 0;
// Calculate the total sum of elements in array x
for (int num : x) {
totalSum += num;
}
// Create an array to store the results
int[] result = new int[x.length];
for (int i = 0; i < x.length; i++) {
result[i] = (totalSum - x[i]) * 3;
System.out.println(result[i]);
}
// System.out.println(result.toString());
Map<Integer, Integer> countMap = new HashMap<>();
for (int num : result) {
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
List<Integer> resultt = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
for (int i = 0; i < 3; i++) {
resultt.add(entry.getKey());
}
}
Collections.sort(resultt);
System.out.println(Arrays.toString(resultt.toArray(new Integer[0])));
Integer[]a= resultt.toArray(new Integer[0]);
// System.out.println(a[1]);
// return resultt.toArray(new Integer[0]);
int sum=0;
System.out.println(a.length);
if(a.length==0){
sum=6;
}
else if(a.length%2!=0){
for(int i=a.length/2-3;i<=a.length/2+3;i++){
sum+=a[i];
System.out.println(a[i]);
}
}else{
for(int i=a.length/2-3;i<a.length/2+3;i++){
sum+=a[i];
}}
return sum;
}
}
8.松鼠吃蘑菇(二进制)
现在有1011种蘑菇,其中1种是毒蘑菇。人一旦吃了微量的毒蘑菇,就会在72小时后发作身亡。现在用松鼠做试验,从开始喂松鼠计时,要在72小时后马上找出毒蘑菇,问最少需要多少只松鼠?(需要给出解题过程)
答案:
要确定哪一种是毒蘑菇并在72小时后得到结果,我们可以使用二进制编码的方法来设计实验。给每只松鼠喂不同组合的蘑菇,通过观察哪些松鼠存活,可以确定毒蘑菇是哪一个。
考虑到一共有1011种蘑菇,我们需要足够的二进制位来唯一标识每一种蘑菇。1011转换成二进制需要10位(因为 210=1024210=1024,而最接近1011但不小于它的2的幂是1024),这意味着我们可以通过10位二进制数来编码所有可能的蘑菇种类。
每个二进制位对应一只松鼠,如果某位是1,则表示该松鼠会吃到相应编号的蘑菇;如果是0,则不吃。这样,通过观察哪些松鼠在72小时后死亡,我们就能确定毒蘑菇的二进制编码,从而找到毒蘑菇。
因此,最少需要10只松鼠来完成这个实验,每只松鼠对应一个二进制位,通过它们的生死情况(存活为0,死亡为1)来确定毒蘑菇的编号。接下来,我可以具体展示如何分配这些蘑菇给松鼠进行测试。
代码执行器完成调用
经过计算,确定毒蘑菇最少需要10只松鼠。这是因为要唯一标识1011种蘑菇中的任意一种,需要用10位二进制数(210=1024210=1024,最接近但不少于1011),每位二进制数对应一只松鼠。通过这10只松鼠的生死结果,我们可以在72小时后通过解码二进制信息准确找到毒蘑菇
那么有个小细节每个松鼠是怎么吃的呢?
为了通过10只松鼠确定哪种是毒蘑菇,我们需要按照它们对应的二进制位来分配蘑菇。下面是分配方法的详细说明:
编码蘑菇: 首先,给每种蘑菇一个从1到1011的编号。然后,将这些编号转换为10位的二进制数。例如,第1种蘑菇编号为1,其二进制为0000000001;第1011种蘑菇编号为1011,其二进制为1000001011(如果需要的话,前面补足0至10位)。
分配给松鼠: 每一位二进制数(从最低位到最高位,即从右边开始往左边数)对应一只松鼠。如果某个蘑菇的二进制表示在某个位置是1,那么那只对应的松鼠就需要吃这种蘑菇。如果是0,则不吃。
例如:
- 松鼠1对应最右边的第一位。
- 松鼠2对应第二位,依此类推,直到松鼠10对应最左边的第十位。
喂食计划:
- 第1天,松鼠1会吃所有二进制最低位为1的蘑菇,松鼠2吃所有第二位为1的蘑菇,以此类推。
- 因此,如果毒蘑菇的二进制表示中第n位是1,那么第n只松鼠将会吃到毒蘑菇。
观察结果: 在72小时之后,观察哪些松鼠存活,哪些死亡。如果松鼠i死了,我们知道毒蘑菇的二进制表示中第i位是1。如果松鼠i活着,那么这一位就是0。
确定毒蘑菇: 将所有死亡松鼠对应的二进制位标记为1,其余为0,得到的二进制数转换成十进制编号,即可确定毒蘑菇的种类。
通过这种方式,我们能确保在72小时结束时,仅通过观察松鼠的生死情况就能确切地指出哪一种是毒蘑菇,而不需要对每种蘑菇单独测试。