2024-11-24 16:55
题目分析:
本题描述了小E参加一系列共 n 场比赛的情况,赢得一场比赛可得 1 分,若连续赢得两场或更多比赛,从第二场开始每多赢一场额外再得 1 分。需要根据给定的 n 场比赛结果数组 a(其中 1 表示赢,0 表示输)来计算小E最终能获得的总分数。关键在于准确判断连续获胜的场次,以便正确计算额外得分。
题解思路:
1. 变量初始化
- 在
solution方法中,首先定义了两个变量:totalScore:用于累计小E的总分数,初始化为0。这个变量会随着对每场比赛结果的处理而不断更新,最终存储的就是小E在所有比赛结束后的总得分。consecutiveWins:用于记录小E连续获胜的场次,初始化为0。每当小E赢得一场比赛,这个变量就会增加1,当小E输掉一场比赛时,这个变量就会重置为0。
2. 遍历比赛结果数组
- 使用
for循环遍历给定的比赛结果数组a,循环变量i从0到n - 1,依次处理每一场比赛的结果。
3. 根据比赛结果更新分数和连续获胜场次
- 对于每场比赛结果
a[i]:- 如果
a[i] == 1,表示小E赢得了这场比赛:- 首先,将
totalScore增加1,因为赢得一场比赛至少能得1分。 - 然后,将
consecutiveWins增加1,表示连续获胜的场次增加了一场。 - 接着,判断
consecutiveWins是否大于等于2。如果是,说明小E已经连续赢得了两场或更多比赛,此时需要再给totalScore增加1分,以计算额外的得分。
- 首先,将
- 如果
a[i] == 0,表示小E输掉了这场比赛,此时将consecutiveWins重置为0,因为连续获胜的场次被中断了。
- 如果
4. 返回总分数
- 当循环遍历完整个比赛结果数组
a后,totalScore变量中已经累计了小E根据比赛结果和规则所获得的总分数,最后将totalScore返回作为本题的最终答案。
代码
public static int solution(int n, int[] a) {
int totalScore = 0;
int consecutiveWins = 0;
for (int i = 0; i < n; i++) {
if (a[i] == 1) {
totalScore++;
consecutiveWins++;
if (consecutiveWins >= 2) {
totalScore++;
}
} else {
consecutiveWins = 0;
}
}
return totalScore;
}