个人网站的名称,大型购物网站建设费用,中国十大原画培训机构,如何注册自媒体平台大家好#xff0c;我是星恒 今天的每一一题是一道简单题目#xff0c;但是没能秒掉#xff0c;原因就是题意理解不到位#xff0c;边界问题没有判断清楚 不过这本来就是一个试错#xff0c;迭代#xff0c;积累经验的过程#xff0c;加油加油#xff0c;相信做多了我是星恒 今天的每一一题是一道简单题目但是没能秒掉原因就是题意理解不到位边界问题没有判断清楚 不过这本来就是一个试错迭代积累经验的过程加油加油相信做多了自然就可以秒掉啦 题目:给你两个下标从 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.length1 n 10000 player1[i], player2[i] 10
分析这道题最主要的事理解题意注意他说的前两个元素为10是说的任意元素的前两个元素还有注意01的边界问题要分类讨论最后如果能合并就合并了
题解题解一最无脑题解
class Solution {public int isWinner(int[] player1, int[] player2) {if (player1.length 1) {if (player1[0] player2[0]) {return 1;} else if (player1[0] player2[0]) {return 2;} else {return 0;}}int score1 sumScore(player1);int score2 sumScore(player2);if (score1 score2) {return 1;} else if (score1 score2) {return 2;} else {return 0;}}public int sumScore(int[] player) {int score 0;if (player[0] 10) {score player[0] 2 * player[1];} else {score player[0] player[1];}for (int i 2; i player.length; i) {if (player[i - 1] 10 || player[i - 2] 10) {score 2 * player[i];} else {score player[i];}}return score;}
}优化两种方式的本质是一样的只是第二种的写法更优雅
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;}
优化点
三重if如何使用 **条件运算符 **来表达边界0 和 1如何更优雅的处理 写出来后看看能不能和主要处理函数合并 0当是0的时候res 就是本身1当是1的时候两种情况第一个为10第一个不为10如何判断呢判断i - 1 是否为10i 0 player[i - 1] 10) || (i 1 player[i - 2] 10所以这个i 0就很妙一语双关太妙了呀不过说实话不好想 其实这里主要得到这个经验 当后面的计算和前两个有关时一定要特殊判断第一个情况和第二个情况