leetcode:908. 最小差值 I
2024-01-09 09:44:33
一、题目
二、函数原型
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;
}
}
文章来源:https://blog.csdn.net/2301_76197086/article/details/135420856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!