每日一题·1200.最小绝对差

题目

给你个整数数组 arr,其中每个元素都 不相同

请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。

示例

 

思路

寻找最小绝对差的元素对,并且按升序的顺序返回。

申请额外数组,保存最小绝对值差的元素

先对整数数组arr将其数组元素升序处理一下。

然后遍历整个数组,两两进行比较,将最小绝对差对保存

代码

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int cmp(const void * a, const void * b)
{
    return *(int *)a - *(int *)b;
}
/*
*int** minimumAbsDifference(int* arr, int arrSize, int* returnSize, int** returnColumnSizes)
int** minimumAbsDifference:寻找数组中最小绝对差对
int* arr:数组
int arrSize:数组长度
int* returnSize:返回数组的行
int** returnColumnSizes:返回数组的列长
返回值:二维数组保存最小绝对差对
*/
int** minimumAbsDifference(int* arr, int arrSize, int* returnSize, int** returnColumnSizes){
    qsort(arr, arrSize, sizeof(arr[0]), cmp);
    int ** ans = (int **)malloc(sizeof(int *) *  arrSize);//申请额外空间
    *returnColumnSizes = (int *)malloc(sizeof(int) * arrSize);
    int i = 0;
    for(i = 0; i < arrSize; i++)//申请额外空间
    {
        ans[i] = (int *)malloc(sizeof(int) * 2);
        (*returnColumnSizes)[i] = 2;    
    }
    int min = INT_MAX;
    *returnSize = 0;
    for(i = 0; i < arrSize-1; i++)//遍历整个数组
    {
        if((arr[i+1] - arr[i]) < min)//保存最小绝对差
        {
            min = arr[i+1] - arr[i];
            *returnSize = 0;
            ans[(*returnSize)][0] = arr[i];
            ans[(*returnSize)][1] = arr[i+1];
            (*returnSize)++;
        }
        else if((arr[i+1] - arr[i]) == min)
        {
            ans[(*returnSize)][0] = arr[i];
            ans[(*returnSize)][1] = arr[i+1];
            (*returnSize)++;
        }
    }
    return ans;
}

时间空间复杂度

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值