[豆包MarCode AI 刷题] 算法题解 Java 青训入营考核 五题打卡第三天
目录
11 中 观光景点组合得分问题
55 易 小E的射击训练
47 易 完美偶数计数
48 易 替换函数
70 易 打点计数器的区间合并
欢迎你报名豆包MarsCode 青训营-寒假专场!非常开心你加入这个充满活力和创新的大家庭。在这里,你将遇到一群和你一样对技术充满热情的小伙伴,一起学习、成长、分享~我们准备了丰富的课程内容,还有各种实战项目等你来挑战,相信你一定会收获满满
青训营是字节跳动技术团队发起的技术系列培训 & 人才选拔项目;面向高校在校生,旨在培养优秀且具有职业竞争力的开发工程师。
本期青训营由豆包MarsCode 团队联合掘金社区主办,课程包含前端、后端和大数据方向,在这个飞速发展的 AI 时代,我们将和豆包MarsCode 一起深入探索,在青训营的技术氛围中,学习技术,高效写码~
11 中 观光景点组合得分问题
import java.util.Arrays;
public class Main {
public static int solution(int[] values) {
int max=0;
for(int i=0;i<values.length;i++){
for(int j=i+1;j<values.length;j++){
max=Math.max(max, values[i]+values[j]+i-j);
}
}
return max; // Placeholder return
}
public static void main(String[] args) {
System.out.println(solution(new int[]{8, 3, 5, 5, 6}) == 11 ? 1 : 0);
System.out.println(solution(new int[]{10, 4, 8, 7}) == 16 ? 1 : 0);
System.out.println(solution(new int[]{1, 2, 3, 4, 5}) == 8 ? 1 : 0);
}
}
55 易 小E的射击训练
public class Main {
public static int solution(int x, int y) {
// 计算射击点到靶心的距离的平方
double distanceSquared = x * x + y * y;
// 如果距离的平方大于100(即大于10的半径),得0分
if (distanceSquared > 100) {
return 0;
}
// 遍历从大到小的得分情况,判断射击点在哪个圆内
for (int i = 1; i <= 10; i++) {
// 如果距离的平方小于等于i*i,说明在第i个环内
if (distanceSquared <= i * i) {
return 11 - i;
}
}
// 如果没有匹配的情况(不太可能到达这里),返回0分
return 0;
}
public static void main(String[] args) {
// System.out.println(solution(1, 0) == 10);
// System.out.println(solution(1, 1) == 9);
// System.out.println(solution(0, 5) == 6);
// System.out.println(solution(3, 4) == 6);
// System.out.println(solution(1, 0) );
// System.out.println(solution(1, 1) );
// System.out.println(solution(0, 5) );
// System.out.println(solution(3, 4) );
}
}
47 易 完美偶数计数
public class Main {
public static int solution(int n, int l, int r, int[] a) {
int cnt=0;
for(int i=0;i<a.length;i++){
if(a[i]%2==0&&a[i]>=l&&a[i]<=r){
cnt++;
}
}
return cnt;
}
public static void main(String[] args) {
System.out.println(solution(5, 3, 8, new int[]{1, 2, 6, 8, 7}) == 2);
System.out.println(solution(4, 10, 20, new int[]{12, 15, 18, 9}) == 2);
System.out.println(solution(3, 1, 10, new int[]{2, 4, 6}) == 3);
}
}
48 易 替换函数
public class Main {
public static String solution(String s) {
StringBuilder sb = new StringBuilder ("");
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='a'){
sb.append("%100");
}else{
sb.append(s.charAt(i));
}
}
return sb.toString(); // Placeholder
}
public static void main(String[] args) {
System.out.println(solution("abcdwa").equals("%100bcdw%100"));
System.out.println(solution("banana").equals("b%100n%100n%100"));
System.out.println(solution("apple").equals("%100pple"));
}
}
70 易 打点计数器的区间合并
import java.util.Arrays;
public class Main {
public static int solution(int[][] inputArray) {
// 对范围按起始值进行排序
Arrays.sort(inputArray, (a, b) -> Integer.compare(a[0], b[0]));
int totalPoints = 0;
int[] currentRange = inputArray[0]; // 初始化当前范围为第一个范围
// 遍历剩下的范围
for (int i = 1; i < inputArray.length; i++) {
// 获取当前的范围和下一个范围
int[] nextRange = inputArray[i];
// 检查是否有重叠
if (nextRange[0] <= currentRange[1]) {
// 有重叠,合并范围
currentRange[1] = Math.max(currentRange[1], nextRange[1]);
} else {
// 没有重叠,将当前范围的长度加到总点数
totalPoints += currentRange[1] - currentRange[0] + 1;
// 更新当前范围为下一个范围
currentRange = nextRange;
}
}
// 最后一个范围的点数也要加上
totalPoints += currentRange[1] - currentRange[0] + 1;
return totalPoints;
}
public static void main(String[] args) {
// You can add more test cases here
int[][] testArray1 = {{1, 4}, {7, 10}, {3, 5}};
int[][] testArray2 = {{1, 2}, {6, 10}, {11, 15}};
System.out.println(solution(testArray1) == 9);
System.out.println(solution(testArray2) == 12);
}
}