leetcode:908. 最小差值 I

一、题目

leetcode:908. 最小差值 I_第1张图片

二、函数原型

int smallestRangeI(int* nums, int numsSize, int k) 

三、思路

本题题目有些绕口,但是无伤大雅。本质就是可以对数组中的每个元素进行加/减 k 的操作,然后求数组中的最大、最小元素的最小差值。

分为几种情况:

1.原数组中最大值和最小值的差值一半 小于等于 k,说明最大、最小元素可以通过加/减 k 的操作后相等,那么最大、最小元素的最小差值就是0

2.原数组中最大值和最小值的差值一半 大于 k,明最大、最小元素不可以通过加/减 k 的操作相等,那么最大、最小元素的最小差值就是 max - k - (min + k)

四、代码

int cmp(const void* e1,const void* e2)
{
    return *(int*)e1-*(int*)e2;
}

int smallestRangeI(int* nums, int numsSize, int k) {
    qsort(nums,numsSize,sizeof(int),cmp);//排序找到最大最小元素

    int min=nums[0];//最小元素
    int max=nums[numsSize-1];//最大元素

    if((float)(max-min)/2<=(float)k)
    {
        return 0;
    }
    else
    {
        return max-k-min-k;
    }
    
}

你可能感兴趣的:(leetcode刷题训练营,leetcode,算法,职场和发展)