2660. 保龄球游戏的获胜者 --力扣 --JAVA

简介: 给你两个下标从 0 开始的整数数组 player1 和 player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。保龄球比赛由 n 轮组成,每轮的瓶数恰好为 10 。假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为:如果玩家在该轮的前两轮的任何一轮中击中了 10 个瓶子,则为 2xi 。否则,为 xi 。玩家的得分是其 n 轮价值的总和。返回如果玩家 1 的得分高于玩家 2 的得分,则为 1 ;如果玩家 2 的得分高于玩家 1 的得分,则为 2 ;如果平局,则为 0 。

 题目

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

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

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

    • 如果玩家在该轮的前两轮的任何一轮中击中了 10 个瓶子,则为 2xi
    • 否则,为 xi

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

    返回

      • 如果玩家 1 的得分高于玩家 2 的得分,则为 1
      • 如果玩家 2 的得分高于玩家 1 的得分,则为 2
      • 如果平局,则为 0

      解题思路

        1. 通过List存储上两个数据;
        2. 遍历player1统计玩家一的分数;
        3. 遍历player2统计玩家二的分数;
        4. 两者相减,大于0返回1,小于0返回2,等于0返回0;

        代码展示

        class Solution {
            public int isWinner(int[] player1, int[] player2) {
                List<Integer> data = new ArrayList<>();
                int sum = 0;
                for(int num : player1){
                    if(data.contains(10)){
                        sum += num * 2;
                    } else {
                        sum += num;
                    }
                    if(data.size() == 2){
                        data.remove(0);
                    }
                    data.add(num);
                }
                data = new ArrayList<>();
                for(int num : player2){
                    if(data.contains(10)){
                        sum -= num * 2;
                    } else {
                        sum -= num;
                    }
                    if(data.size() == 2){
                        data.remove(0);
                    }
                    data.add(num);
                }
                if(sum > 0){
                    return 1;
                } else if(sum < 0){
                    return 2;
                } else {
                    return 0;
                }
            }
        }

        image.gif


        目录
        相关文章
        |
        7月前
        |
        算法 Go 索引
        【LeetCode 热题100】45:跳跃游戏 II(详细解析)(Go语言版)
        本文详细解析了力扣第45题“跳跃游戏II”的三种解法:贪心算法、动态规划和反向贪心。贪心算法通过选择每一步能跳到的最远位置,实现O(n)时间复杂度与O(1)空间复杂度,是面试首选;动态规划以自底向上的方式构建状态转移方程,适合初学者理解但效率较低;反向贪心从终点逆向寻找最优跳点,逻辑清晰但性能欠佳。文章对比了各方法的优劣,并提供了Go语言代码实现,助你掌握最小跳跃次数问题的核心技巧。
        321 15
        |
        10月前
        |
        Java
        Java实现贪吃蛇游戏
        本文介绍了如何使用Java实现一个简单的贪吃蛇游戏。
        439 4
        |
        3月前
        |
        设计模式 人工智能 前端开发
        现代 Java 实现数字华容道与石头迷阵游戏的项目实战及项目开发指南
        本项目基于Java 17+,采用JavaFX与MVC架构,实战开发数字华容道/石头迷阵游戏。内容涵盖技术选型、核心逻辑、现代GUI设计、动画实现及项目打包发布,结合sealed class、record等新特性,打造简洁可维护的游戏代码结构。
        163 0
        |
        4月前
        |
        机器学习/深度学习 存储 Java
        Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
        本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。
        |
        算法
        Leetcode第45题(跳跃游戏II)
        这篇博客文章讨论了如何使用贪心算法解决LeetCode第45题“跳跃游戏II”,目的是找到使用最少跳跃次数到达数组末尾的策略。
        244 8
        Leetcode第45题(跳跃游戏II)
        |
        7月前
        |
        算法 Go
        【LeetCode 热题100】55:跳跃游戏(详细解析)(Go语言版)
        本篇解析详细讲解了 LeetCode 热题 55——跳跃游戏(Jump Game)。通过判断是否能从数组起点跳至终点,介绍了两种高效解法:贪心算法和反向思维。贪心法通过维护最远可达位置 `maxReach` 实现一次遍历,时间复杂度 O(n),空间复杂度 O(1);反向法则从终点回溯,判断是否可到达起点。两者均简洁高效,适合面试使用。延伸题目如 LeetCode 45 进一步提升挑战。
        236 7
        LeetCode第55题跳跃游戏
        LeetCode第55题"跳跃游戏"的解题方法,通过记录当前最远可达到的位置并判断每个位置是否可达以及能否到达末尾,有效解决了跳跃至数组末尾的可行性问题。
        LeetCode第55题跳跃游戏
        |
        10月前
        |
        IDE Java API
        Java游戏开发基础:从零开始制作一个简单的2D游戏
        本文介绍了使用Java开发一个简单的2D避障游戏的基础流程。
        775 10
        |
        开发框架 IDE Java
        java制作游戏,如何使用libgdx,入门级别教学
        本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
        562 1
        java制作游戏,如何使用libgdx,入门级别教学
        Leetcode第55题(跳跃游戏)
        LeetCode第55题“跳跃游戏”要求判断在一个非负整数数组中,从第一个位置出发,是否能够到达最后一个位置,其中每个位置的元素代表可跳跃的最大长度。
        106 0
        下一篇
        oss云网关配置