2023-09-15 LeetCode每日一题(宝石补给)

2023-09-15每日一题

一、题目编号

LCP 50. 宝石补给

二、题目链接

点击跳转到题目位置

三、题目描述

欢迎各位勇者来到力扣新手村,在开始试炼之前,请各位勇者先进行「宝石补给」。

每位勇者初始都拥有一些能量宝石, gem[i] 表示第 i 位勇者的宝石数量。现在这些勇者们进行了一系列的赠送,operations[j] = [x, y] 表示在第 j 次的赠送中 第 x 位勇者将自己一半的宝石(需向下取整)赠送给第 y 位勇者。

在完成所有的赠送后,请找到拥有最多宝石的勇者和拥有最少宝石的勇者,并返回他们二者的宝石数量之差

注意:

  • 赠送将按顺序逐步进行。

示例 1:
2023-09-15 LeetCode每日一题(宝石补给)_第1张图片
示例 2:
2023-09-15 LeetCode每日一题(宝石补给)_第2张图片
示例 3:
在这里插入图片描述
提示:

  • 2 <= gem.length <= 10^3
  • 0 <= gem[i] <= 10^3
  • 0 <= operations.length <= 10^4
  • operations[i].length == 2
  • 0 <= operations[i][0], operations[i][1] < gem.length

四、解题代码

class Solution {
public:
    int giveGem(vector<int>& gem, vector<vector<int>>& operations) {
        for(int i = 0; i < operations.size(); ++i){
            int x = operations[i][0];
            int y = operations[i][1];
            int num = gem[x] / 2;
            gem[x] -= num;
            gem[y] += num;
        }
        int max0 = INT_MIN;
        int min0 = INT_MAX;
        for(int i = 0; i < gem.size(); ++i){
            max0 = max(max0, gem[i]);
            min0 = min(min0, gem[i]);
        }
    return max0 - min0;
    }
};

五、解题思路

(1) 先按照题目模拟,将能量宝石进行转移。
(2) 线性枚举,找出修改后的最大值和最小值,然后求差值并返回即可。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)