1、(最富裕的小家庭):
这段代码是解决“最富裕的小家庭”的问题。它提供了一个Java类Main
,其中包含main
方法,用于计算给定家庭成员关系和财富值的情况下,最富裕的小家庭的财富和。
main
方法首先读取成员总数n
,然后读取每个成员的财富值并存储在数组wealth
中。同时,使用数组familyWealth
来存储每个成员及其直接子节点的财富总和。通过遍历输入的家庭成员关系,将子节点的财富值累加到其父节点的familyWealth
中。
最后,使用Arrays.stream
和max
方法找出familyWealth
数组中的最大值,并打印出来。
2、(最长子字符串的长度):
这段代码是解决“最长子字符串的长度(一)”的问题。它提供了一个Java类Main
,其中包含main
方法和getMaxString
方法,用于找出环形字符串中’o’字符出现次数为偶数的最长子字符串的长度。
main
方法首先读取输入的字符串s
,然后调用getMaxString
方法并打印结果。
getMaxString
方法首先统计字符串中’o’字符的个数。如果’o’的个数为偶数,则直接返回字符串的长度n
,因为整个字符串满足条件。如果’o’的个数为奇数,则返回n - 1
,因为在环形字符串中去掉一个’o’可以使剩余部分的’o’个数为偶数,从而得到最长的满足条件的子字符串。
package OD342;
import java.util.Arrays;
import java.util.Scanner;
/**
* @description 最富裕的小家庭
* @level 6
* @type 逻辑分析
*/
/**
* 题目描述
* <p>
* 在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。
* 现给你一颗树,请计算出最富裕的小家庭的财富和。
* <p>
* 输入描述
* <p>
* 第一行为一个数 N,表示成员总数,成员编号 1~N。1 ≤ N ≤ 1000
* 第二行为 N 个空格分隔的数,表示编号 1~N 的成员的财富值。0 ≤ 财富值 ≤ 1000000
* 接下来 N -1 行,每行两个空格分隔的整数(N1, N2),表示 N1 是 N2 的父节点。
* <p>
* 输出描述
* <p>
* 最富裕的小家庭的财富和
*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
//成员个数
int n = sc.nextInt();
//成员财富,从1开始
int[] wealth = new int[n + 1];
//该成员的家庭财富:自身+子节点
int[] familyWealth = new int[n + 1];
for (int i = 1; i <= n; i++) {
wealth[i] = sc.nextInt();
//初始化家庭财富
familyWealth[i] = wealth[i];
}
//依次读取成员关系,并直接将对应子节点的值加到其对应的父节点的famliyWealth中
for (int i = 0; i < n - 1; i++) {
int parent = sc.nextInt();
int child = sc.nextInt();
familyWealth[parent] += wealth[child];
}
//遍历找到最大的familyWealth
int max = Arrays.stream(familyWealth).max().orElse(0);
System.out.println(max);
}
sc.close();
}
}
package OD343;
import java.util.Scanner;
/**
* @description 最长子字符串的长度(一)
* @level 6
* @type 逻辑分析
*/
/**
* 题目描述
* 给你一个字符串 s,首尾相连成一个环形,请你在环中找出 'o' 字符出现了偶数次最长子字符串的长度。
* <p>
* 输入描述
* 输入是一个小写字母组成的字符串
* <p>
* 输出描述
* 输出是一个整数
* <p>
* 备注
* 1 ≤ s.length ≤ 500000
* s 只包含小写英文字母
*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 读入数据
String s = sc.next();
System.out.println(getMaxString(s));
}
/**
* 返回字符串中包含偶数个o的最长子字符串的长度
* @create 2024/3/16 17:31
* @param s
* @return int
*/
public static int getMaxString(String s) {
// 字符串长度
int n = s.length();
// 统计字符串中'o'的个数
int count = 0;
//遍历字符,统计o的个数
for(int i = 0; i < n; i++){
if(s.charAt(i) == 'o'){
count++;
}
}
//如果是偶数,则本身就是最大
if(count % 2 == 0){
return n;
}else {
return n - 1;
}
}
}