力扣题目链接:https://leetcode.cn/problems/determine-the-winner-of-a-bowling-game/
给你两个下标从 0 开始的整数数组 player1
和 player2
,分别表示玩家 1 和玩家 2 击中的瓶数。
保龄球比赛由 n
轮组成,每轮的瓶数恰好为 10
。
假设玩家在第 i
轮中击中?xi
个瓶子。玩家第 i
轮的价值为:
10
个瓶子,则为 2xi
。xi
。玩家的得分是其 n
轮价值的总和。
返回
1
;2
;0
。?
示例 1:
输入:player1 = [4,10,7,9], player2 = [6,5,2,3] 输出:1 解释:player1 的得分是 4 + 10 + 2*7 + 2*9 = 46 。 player2 的得分是 6 + 5 + 2 + 3 = 16 。 player1 的得分高于 player2 的得分,所以 play1 在比赛中获胜,答案为 1 。
示例 2:
输入:player1 = [3,5,7,6], player2 = [8,10,10,2] 输出:2 解释:player1 的得分是 3 + 5 + 7 + 6 = 21 。 player2 的得分是 8 + 10 + 2*10 + 2*2 = 42 。 player2 的得分高于 player1 的得分,所以 play2 在比赛中获胜,答案为 2 。
示例 3:
输入:player1 = [2,3], player2 = [4,1] 输出:0 解释:player1 的得分是 2 + 3 = 5 。 player2 的得分是 4 + 1 = 5 。 player1 的得分等于 player2 的得分,所以这一场比赛平局,答案为 0 。
?
提示:
n == player1.length == player2.length
1 <= n <= 1000
0 <= player1[i], player2[i] <= 10
可以写一个函数getScore
,用来计算一个“击球数组”的得分。
假设我们实现了这一函数,那么只需要计算出给定的两个数组的得分并进行比较即可。
这个函数怎么实现呢?
若得分数组的长度为1,直接返回 v [ 0 ] v[0] v[0]即可
否则,答案的初始值是前两个元素的得分,从第3个元素(如有)开始遍历,并将得分累加到答案中即可
class Solution {
private:
int getScore(vector<int>& v) { // v: 1~1000
if (v.size() == 1) {
return v[0];
}
int ans = v[0] + (v[0] == 10 ? 2 : 1) * v[1];
for (int i = 2; i < v.size(); i++) {
ans += (v[i - 1] == 10 || v[i - 2] == 10 ? 2 : 1) * v[i];
}
return ans;
}
public:
int isWinner(vector<int>& player1, vector<int>& player2) {
int v1 = getScore(player1), v2 = getScore(player2);
return v1 == v2 ? 0 : v1 < v2 ? 2 : 1;
}
};
from typing import List
class Solution:
def getScore(self, v: List[int]) -> int:
if len(v) == 1:
return v[0]
ans = v[0] + (2 if v[0] == 10 else 1) * v[1]
for i in range(2, len(v)):
ans += (2 if v[i - 1] == 10 or v[i - 2] == 10 else 1) * v[i]
return ans
def isWinner(self, player1: List[int], player2: List[int]) -> int:
v1, v2 = self.getScore(player1), self.getScore(player2)
return 0 if v1 == v2 else 2 if v1 < v2 else 1
同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/135247177