【leetcode】公平的糖果交换

 

//C语言双循环遍历
int* fairCandySwap(int* A, int ASize, int* B, int BSize, int* returnSize){
    int sumA=0,sumB=0,i,j;
    int* arr = (int*)calloc(2,sizeof(int));
    *returnSize=2;
    for (i=0; i<ASize; i++)
        sumA+=A[i];
    for (i=0; i<BSize; i++)
        sumB+=B[i];
    
    for (i=0; i<ASize; i++)
    {
        for (j=0; j<BSize; j++)
        {
            if (A[i]-B[j] == (sumA-sumB)/2){
                arr[0]=A[i];
                arr[1]=B[j];
                return arr;
            }
            
        }
    }
    return arr;
}

 

//C语言 哈希 最快
int* fairCandySwap(int* A, int ASize, int* B, int BSize, int* returnSize){
    int sumA=0,sumB=0,i,j,val;
    int hash[100001]={0};
    int* arr = (int*)calloc(2,sizeof(int));
    *returnSize=2;
    j=(ASize>BSize)?ASize:BSize;
    for (i=0; i!=j; i++){
        if (i<ASize)
            sumA+=A[i];
        if (i<BSize){
            sumB+=B[i];
            hash[B[i]]++;
        }    
    }    
    for (i=0; i<ASize; i++)
    {
        val = (sumA>sumB)? A[i]-(sumA-sumB)/2: A[i]+abs((sumA-sumB)/2);
        if (val>=0 && val<=100001 && hash[val]){
            arr[0]=A[i];
            arr[1]=val;
            return arr;
        }
    }
    return arr;    
}

 

posted @ 2020-10-22 15:56  温暖了寂寞  阅读(145)  评论(0编辑  收藏  举报