LeetCode 2660. 保龄球游戏的获胜者:模拟
2023-12-27 17:03:58
【LetMeFly】2660.保龄球游戏的获胜者:模拟
力扣题目链接: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 的得分,则为
1
; - 如果玩家 2 的得分高于玩家 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个元素(如有)开始遍历,并将得分累加到答案中即可
- 时间复杂度 O ( n ) O(n) O(n)
- 空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C++
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;
}
};
Python
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
文章来源:https://blog.csdn.net/Tisfy/article/details/135247177
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!