这道题主要考察对题意得理解我们只需要求出爱丽丝和鲍勃的所有值的和然后进行相减得出他们的差,利用这个差进行for结果集查询,筛选符合的条件,不过时间复杂度是o(n2)但是空间复杂度是o(1),也可以用hash,空间换时间了具体可以看官方题解,这里就不多介绍了,看代码
难度简单212收藏分享切换为英文接收动态反馈
爱丽丝和鲍勃拥有不同总数量的糖果。给你两个数组
aliceSizes
和bobSizes
,aliceSizes[i]
是爱丽丝拥有的第i
盒糖果中的糖果数量,bobSizes[j]
是鲍勃拥有的第j
盒糖果中的糖果数量。两人想要互相交换一盒糖果,这样在交换之后,他们就可以拥有相同总数量的糖果。一个人拥有的糖果总数量是他们每盒糖果数量的总和。
返回一个整数数组
answer
,其中answer[0]
是爱丽丝必须交换的糖果盒中的糖果的数目,answer[1]
是鲍勃必须交换的糖果盒中的糖果的数目。如果存在多个答案,你可以返回其中 任何一个 。题目测试用例保证存在与输入对应的答案。示例 1:
输入:aliceSizes = [1,1], bobSizes = [2,2] 输出:[1,2]示例 2:
输入:aliceSizes = [1,2], bobSizes = [2,3] 输出:[1,2]示例 3:
输入:aliceSizes = [2], bobSizes = [1,3] 输出:[2,3]示例 4:
输入:aliceSizes = [1,2,5], bobSizes = [2,4] 输出:[5,4]提示:
1 <= aliceSizes.length, bobSizes.length <= 104
1 <= aliceSizes[i], bobSizes[j] <= 105
- 爱丽丝和鲍勃的糖果总数量不同。
- 题目数据保证对于给定的输入至少存在一个有效答案。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* fairCandySwap(int* aliceSizes, int aliceSizesSize, int* bobSizes, int bobSizesSize, int* returnSize){
int *R=(int*)malloc(sizeof(int)*2);
int i,j,sum1=0,sum2=0;
for(i=0;i<aliceSizesSize;i++)
{
sum1+=aliceSizes[i];
}
for(i=0;i<bobSizesSize;i++)
{
sum2+=bobSizes[i];
}
int flag=sum1-sum2;
int flag1=0,flag2=0;
*returnSize=2;
for(i=0;i<aliceSizesSize;i++)
{
for(j=0;j<bobSizesSize;j++)
{
if((aliceSizes[i]-bobSizes[j])*2==flag)
{
flag1=bobSizes[j];
flag2=aliceSizes[i];
R[0]=flag2,R[1]=flag1;
return R;
}
}
}
return R;
}