美文网首页
LeetCode 第 ¥ 题:吃葡萄

LeetCode 第 ¥ 题:吃葡萄

作者: 放开那个BUG | 来源:发表于2021-03-15 21:31 被阅读0次

1、前言

有三种葡萄,每种分别有 a, b, c 颗,现在有三个人,第一个人只吃第一种和第二种葡萄,第二个人只吃第二种和第三种葡萄,第三个人只吃第一种和第三种葡萄。
现在给你输入 a, b, c 三个值,请你适当安排,让三个人吃完所有的葡萄,算法返回吃的最多的人最少要吃多少颗葡萄。

2、思路

题目的意思有点弯弯绕,差点没理解。说的是3个人每个人只吃两种葡萄,假设有一个人吃的最多,有什么方法让他吃的最少。实际上,吃的最少没有固定的一个人,当你给两个人吃的少时,剩下的人必定吃的最多。所以要平衡3个人的关系,让他们彼此吃的差不多,这就是均衡分了。

那均衡分就是将葡萄数量当作线段,组成图形,然后平分周长,即 (a + b + c) / 3,向上取整。

3、代码

public long solution(long a, long b, long c){
        long[] nums = new long[]{a, b, c};
        Arrays.sort(nums);
        long sum = a + b + c;

        // 三角形
        if(nums[0] + nums[1] > nums[2]){
            return (sum + 2) / 3;
        }
        // 不能组成三角形,只能组四边形,平分最长边
        if(2 * (nums[0] + nums[1]) < nums[2]){
            return (nums[2] + 1) / 2;
        }

        // 不能组成三角形,只能组四边形,四边形边平分
        return (sum + 2) / 3;
    }

相关文章

网友评论

      本文标题:LeetCode 第 ¥ 题:吃葡萄

      本文链接:https://www.haomeiwen.com/subject/nizwiktx.html