力扣——50.宝石补给
题目描述:
每位勇者初始都拥有一些能量宝石, gem[i]
表示第 i
位勇者的宝石数量。现在这些勇者们进行了一系列的赠送,operations[j] = [x, y]
表示在第 j
次的赠送中 第 x
位勇者将自己一半的宝石(需向下取整)赠送给第 y
位勇者。
在完成所有的赠送后,请找到拥有最多宝石的勇者和拥有最少宝石的勇者,并返回他们二者的宝石数量之差。
示例:
输入:gem = [3,1,2], operations = [[0,2],[2,1],[2,0]]
输出:2
解释: 第 1 次操作,勇者 0
将一半的宝石赠送给勇者 2
, gem = [2,1,3]
第 2 次操作,勇者 2
将一半的宝石赠送给勇者 1
, gem = [2,2,2]
第 3 次操作,勇者 2
将一半的宝石赠送给勇者 0
, gem = [3,2,1]
返回 3 - 1 = 2
分析:
简单分析——首先operations的列长度固定为2个元素,通过对operations的行进行遍历,获得给宝石和收宝石的勇者的下标,让对应下标的勇者宝石数量,根据遍历到的数组表进行改变即可,遍历完之后,再找出最多宝石和最少宝石的勇者,将其差返回。
代码解析:
class Solution {
public int giveGem(int[] gem, int[][] operations) {
for (int[] operation : operations) {
int num = gem[operation[0]] / 2 ;
gem[operation[0]] -= num;
gem[operation[1]] += num;
}
int max=gem[0], min = gem[0];
for (int i : gem) {
max = Math.max(i, max);
min = Math.min(i, min);
}
return max - min;
}
}
感谢收看,我的博客:http://47.115.223.247:2001/