1877. 数组中最大数对和的最小值
贴个题目:
贴个示例:
解题思路:
吐槽一下:经典我看不懂题目想让我干嘛?但是看懂了又很简单?什么叫做:“最大数对和最小”?
后来结合示例想一想,应该是让数对的组成平均的前提下,求出最大数对和。
什么叫做数对组成平均呢?
我是这么理解的,就是数对比较对称,看示例2大概就能明白我的意思。
那么搞清楚题意之后,其实就很简单啦:
先排序,然后排序,然后求关于数组中间对称的数对和最大值
贴代码:
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int minPairSum(int* nums, int numsSize){
int max=0;
qsort(nums,numsSize,sizeof(nums[0]),cmp);//排序
for(int i=0;i<numsSize;i++)//遍历数组,找出最大数对和
{
max=fmax(max,nums[i]+nums[numsSize-1-i]);
}
return max;
}
性能分析
时间分析:
快速排序所用时间是:O (nlogn),然后还遍历了一次:O(n),因此时间复杂度是:O (nlogn)
空间分析
新建了常数个变量,另外就是快速排序所用空间:O (logn),因此空间复杂度就是:O (nlogn)