• 50.宝石补给


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

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

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

    注意:

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

    示例 1:

    输入: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

    示例 2:

    输入:gem = [100,0,50,100], operations = [[0,2],[0,1],[3,0],[3,0]]

    输出:75

    解释: 第 1 次操作,勇者 0 将一半的宝石赠送给勇者 2, gem = [50,0,100,100] 第 2 次操作,勇者 0 将一半的宝石赠送给勇者 1, gem = [25,25,100,100] 第 3 次操作,勇者 3 将一半的宝石赠送给勇者 0, gem = [75,25,100,50] 第 4 次操作,勇者 3 将一半的宝石赠送给勇者 0, gem = [100,25,100,25] 返回 100 - 25 = 75

    示例 3:

    输入:gem = [0,0,0,0], operations = [[1,2],[3,1],[1,2]]

    输出:0

    提示:

    • 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

    LCP 50. 宝石补给 - 力扣(LeetCode)

    1. int money ;
    2. int n = operationsSize;
    3. for(int i = 0;i<n;i++){
    4. if(gem[operations[i][0]]%2!=0 ){
    5. money = (gem[operations[i][0]] - 1)/2;
    6. }
    7. else{
    8. money = gem[operations[i][0]]/2;
    9. }
    10. gem[operations[i][0]] -= money;//赠送者的宝石数量
    11. gem[operations[i][1]] += money;//接收者的宝石数量
    12. }

    按照所给的赠与关系来知道赠送的人的宝石数量,然后就可以算出要给出去的宝石数量,分别对相应的勇士进行宝石的增减;

    1. int max = gem[0];
    2. int min = gem[0];
    3. for(int i=1;i<gemSize;i++){
    4. if(max < gem[i]){
    5. max = gem[i];
    6. }
    7. if(min > gem[i]){
    8. min = gem[i];
    9. }
    10. }
    11. return max - min;

    经历过上面的循环之后,就可以得到赠送完成的勇士现有的宝石数量,然后查找最大最小的宝石数量,返回这俩个数的差值

    完整代码

    1. nt giveGem(int* gem, int gemSize, int** operations, int operationsSize, int* operationsColSize){
    2. int money ;
    3. int n = operationsSize;
    4. for(int i = 0;i<n;i++){
    5. if(gem[operations[i][0]]%2!=0 ){
    6. money = (gem[operations[i][0]] - 1)/2;
    7. }
    8. else{
    9. money = gem[operations[i][0]]/2;
    10. }
    11. gem[operations[i][0]] -= money;//赠送者的宝石数量
    12. gem[operations[i][1]] += money;//接收者的宝石数量
    13. }
    14. int max = gem[0];
    15. int min = gem[0];
    16. for(int i=1;i<gemSize;i++){
    17. if(max < gem[i]){
    18. max = gem[i];
    19. }
    20. if(min > gem[i]){
    21. min = gem[i];
    22. }
    23. }
    24. return max - min;
    25. }

  • 相关阅读:
    分享three.js实现乐高小汽车
    Java云原生(Spring Native)开发初体验报告
    终于搞懂了 super(XXXX, self).__init__()的作用是啥了
    java实现备忘录模式
    ABC212
    密码安全策略
    系统移植3:kernel的配置,编译和移植以及根文件系统
    「Spring Boot 系列」08. Spring Boot整合MyBatis
    [NOIP2001 普及组] 最大公约数和最小公倍数问题
    以程序员的身份使用curl获取速卖通详情
  • 原文地址:https://blog.csdn.net/qq_74455082/article/details/132909167