给你两个下标从 0 开始的整数数组 player1
和 player2
,分别表示玩家 1 和玩家 2 击中的瓶数。
保龄球比赛由 n
轮组成,每轮的瓶数恰好为 10
。
假设玩家在第 i
轮中击中 xi
个瓶子。玩家第 i
轮的价值为:
- 如果玩家在该轮的前两轮的任何一轮中击中了
10
个瓶子,则为2xi
。 - 否则,为
xi
。
玩家的得分是其 n
轮价值的总和。
返回
- 如果玩家 1 的得分高于玩家 2 的得分,则为
1
; - 如果玩家 2 的得分高于玩家 1 的得分,则为
2
; - 如果平局,则为
0
。
直接模拟
use std::cmp::Ordering;
impl Solution {
pub fn is_winner(player1: Vec<i32>, player2: Vec<i32>) -> i32 {
let s1 = Self::score(&player1);
let s2 = Self::score(&player2);
match s1.cmp(&s2) {
Ordering::Less => 2,
Ordering::Greater => 1,
Ordering::Equal => 0,
}
}
fn score(player: &Vec<i32>) -> i32 {
let mut ans = 0;
let mut need_more = 0;
player.iter().for_each(|score| {
if need_more > 0 {
ans += 2 * *score;
need_more -= 1;
} else {
ans += *score;
}
if *score == 10 {
need_more = 2;
}
});
ans
}
}