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;
}
网友评论