今天也是刷leetcode的一天
题目
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。
示例 1:
输入: [1,4,3,2]
输出: 4
解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).
提示:
n 是正整数,范围在 [1, 10000].
数组中的元素范围在 [-10000, 10000].
题目分析
一开始我的想法是先对数组进行冒泡排序,然后间隔求和(简单粗暴),可是当超出时间限制这六个字出现时,我懵逼了。
这边整理的方法用到了qsort函数。
qsort函数
函数声明
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void , const void))
参数
base-- 指向要排序的数组的第一个元素的指针。
nitems-- 由 base 指向的数组中元素的个数。
size-- 数组中每个元素的大小,以字节为单位。
compar-- 用来比较两个元素的函数,即函数指针(回调函数)
回调函数的概念
回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数&#