列表

详情


2660. 保龄球游戏的获胜者

给你两个下标从 0 开始的整数数组 player1player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。

保龄球比赛由 n 轮组成,每轮的瓶数恰好为 10

假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为:

玩家的得分是其 n 轮价值的总和。

返回

 

示例 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 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int isWinner(vector<int>& player1, vector<int>& player2) { } };

javascript 解法, 执行用时: 84 ms, 内存消耗: 53.6 MB, 提交时间: 2023-12-27 00:13:29

/**
 * @param {number[]} player1
 * @param {number[]} player2
 * @return {number}
 */
var isWinner = function(player1, player2) {
    const score = function(player) {
        let res = 0;
        for (let i = 0; i < player.length; i++) {
            if (i > 0 && player[i - 1] == 10 || i > 1 && player[i - 2] == 10) {
                res += 2 * player[i];
            } else {
                res += player[i];
            }
        }
        return res;
    }
    const s1 = score(player1);
    const s2 = score(player2);
    return s1 == s2 ? 0 : s1 > s2 ? 1 : 2;
};

java 解法, 执行用时: 1 ms, 内存消耗: 43.7 MB, 提交时间: 2023-12-27 00:13:02

class Solution {
    // 模拟
    public int isWinner(int[] player1, int[] player2) {
        int s1 = score(player1);
        int s2 = score(player2);
        return s1 == s2 ? 0 : s1 > s2 ? 1 : 2;
    }

    public int score(int[] player) {
        int res = 0;
        for (int i = 0; i < player.length; i++) {
            if ((i > 0 && player[i - 1] == 10) || (i > 1 && player[i - 2] >= 10)) {
                res += 2 * player[i];
            } else {
                res += player[i];
            }
        }
        return res;
    }
}

cpp 解法, 执行用时: 36 ms, 内存消耗: 70.4 MB, 提交时间: 2023-05-05 15:56:14

class Solution {
public:
    int isWinner(vector<int>& player1, vector<int>& player2) {
        int n = player1.size();
        bool mark1 = false, mark2 = false;
        int count1 = 0, count2 = 0, sum1 = 0, sum2 = 0;
        for (int i = 0; i < n; ++i) {
            if (count1 == 0) sum1 += player1[i];
            else sum1 += player1[i] * 2, --count1;
            if (count2 == 0) sum2 += player2[i];
            else sum2 += player2[i] * 2, --count2;
            if (player1[i] == 10) count1 = 2;
            if (player2[i] == 10) count2 = 2;
        } 
        if (sum1 == sum2) return 0;
        return sum1 - sum2 > 0 ? 1 : 2;
    }
};

golang 解法, 执行用时: 36 ms, 内存消耗: 6.5 MB, 提交时间: 2023-05-05 15:55:58

func score(a []int) (res int) {
	for i, x := range a {
		if i > 0 && a[i-1] == 10 || i > 1 && a[i-2] == 10 {
			x *= 2
		}
		res += x
	}
	return
}

func isWinner(player1, player2 []int) int {
	s1, s2 := score(player1), score(player2)
	if s1 > s2 {
		return 1
	}
	if s1 < s2 {
		return 2
	}
	return 0
}

python3 解法, 执行用时: 64 ms, 内存消耗: 16.1 MB, 提交时间: 2023-05-05 15:55:38

def score(a: List[int]) -> int:
    res = 0
    for i, x in enumerate(a):
        if i and a[i - 1] == 10 or i > 1 and a[i - 2] == 10:
            x *= 2
        res += x
    return res

class Solution:
    def isWinner(self, player1: List[int], player2: List[int]) -> int:
        s1, s2 = score(player1), score(player2)
        return 1 if s1 > s2 else 2 if s1 < s2 else 0

上一题