题目来源:
leetcode题目,网址:888. 公平的糖果交换 - 力扣(LeetCode)
解题思路:
枚举所有可能,找出符合要求的。
解题代码:
class Solution {
public int[] fairCandySwap(int[] aliceSizes, int[] bobSizes) {
//alice 交换x1,bob交换x2
//alice+x2-x1=bob+x1-x2;
//2x1-2x2=alice-bob
Set<Integer> aliceCandyBox=new TreeSet<>();
Set<Integer> bobCandyBox=new TreeSet<>();
int sumAlice=candySum(aliceSizes,aliceCandyBox);
int sumBob=candySum(bobSizes,bobCandyBox);
int diff=sumAlice-sumBob;
int exchangeAlice=0;
int exchangeBob=0;
for(int alice:aliceCandyBox){
for(int bob:bobCandyBox){
int temp=2*alice-2*bob;
if(temp==diff){
exchangeAlice=alice;
exchangeBob=bob;
break;
}else if(temp<diff){
break;
}
}
if(exchangeAlice!=0&& exchangeBob!=0){
break;
}
}
return new int[]{exchangeAlice,exchangeBob};
}
public int candySum(int[] candy,Set<Integer> candyBox){
int res=0;
for(int i=0;i<candy.length;i++){
res+=candy[i];
candyBox.add(candy[i]);
}
return res;
}
}
总结:
官方题解将 alice 的糖果存入哈希表,根据bob的该盒糖果数计算出 alice 需要交换的糖果数,最后判断哈希表中是否含有该数。