题目

传送门

给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。

返回该 最大总和 。

示例 1:

输入:nums = [1,4,3,2]

输出:4

解释:所有可能的分法(忽略元素顺序)为:

  1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
  2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
  3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4

    所以最大总和为 4

示例 2:

输入:nums = [6,2,6,5,1,2]

输出:9

解释:最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9

提示:

1 <= n <= 104
nums.length == 2 * n
-104 <= nums[i] <= 104

来源:力扣(LeetCode)

解题

模板

int arrayPairSum(int* nums, int numsSize){

}

分析

这里的题目不难,所要思考的是我们对于这个两两分组最小值之和怎样取得最大值。

结果就是尽可能大的和大的一组,使得至少有一个大的进入最后的综合计算,大的数据进入越多就越大,其实也可以理解未计算第二大,第四大,第六大的元素之和,即求取偶数按大小排名元素之和。既然如此我们就可以选择一种新的解决办法,进行排序然后对于偶数项相加就可以得到最后的答案。

第一版 实现办法:

int arrayPairSum(int* nums, int numsSize){
int x=0,ret=0;
for(int i=0;i<numsSize;i++){
for(int k=i;k<numsSize;k++){
if(nums[i]<nums[k]){
x=nums[i];
nums[i]=nums[k];
nums[k]=x;
}
}
}
for(int i=0;i<numsSize;i+=2){
ret+=nums[i];
}
return ret;
}

这个代码有问题吗?没有,但是他有一个缺点,复杂度使整个程序运行比较多个变量的数组就会超时

要解决这问题可以使用C语言里的自带的一个数组排序函数qsort()

这里不写具体用法,给个大致的轮廓示意

int compare(const void* a, const void* b) {
return (*(int*)a)-(*(int*)b);//从小到大
//return *(int *)b-*(int *)a;//从大到小
} void func(int* nums, int numsSize) {
qsort(nums,numsSize,sizeof(int),compare);
}

融合搭配随后的代码里就是这样。

int cmp(int *a, int *b) {
return *a - *b;
} int arrayPairSum(int *nums, int numsSize) {
qsort(nums, numsSize, sizeof(int), cmp);
int ret = 0;
for (int i = 0; i < numsSize; i += 2) {
ret += nums[i];
}
return ret;
}

对于再c语言中很多时候借助于已有的函数逻辑来进行编码的确时恒有帮助,日后会再c语言笔记里补充上各大c函数的笔记。

力扣561. 数组拆分 I-C语言实现-简单题的更多相关文章

  1. Java实现 LeetCode 561 数组拆分 I(通过排序算法改写PS:难搞)

    561. 数组拆分 I 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), -, (an, bn) ,使得从1 到 n 的 min(ai, bi ...

  2. 力扣567.字符串的排列—C语言实现

    题目 来源:力扣(LeetCode)

  3. 力扣119.杨辉三角II-C语言实现

    题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 来源:力扣(LeetCod ...

  4. 力扣485. 最大连续1的个数-C语言实现-简单题

    题目 [题目传送门] 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3 ...

  5. 力扣566. 重塑矩阵-C语言实现-简单题

    题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...

  6. 力扣832. 翻转图像-C语言实现-简单题

    题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

  7. 力扣896. 单调数列-C语言实现-简单题

    题目 传送门 文本 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j, ...

  8. Leetcode 561.数组拆分I

    数组拆分 I 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总 ...

  9. 力扣(LeetCode)561. 数组拆分 I

    给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大. 示例 ...

随机推荐

  1. kubernetes用户权限管理工具permission-manager

    Permission Manager Permission Manager是一个为Kubernetes RBAC和用户管理提供Web UI的项目,为Kubernetes权限管理提供友好的可视化界面. ...

  2. 关掉IE提示“当前安全设置会使计算机有风险”

    我们先来看一下IE浏览器出现的提示窗口,该窗口位于最顶端,不点击设置的话,无法进行下一步的操作. 这时我们点击开始按钮 ,在弹出菜单中选择"运行"菜单项. 在打开的Windows运 ...

  3. 抓包一张tcpdump小抄就够了

    作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络等. ...

  4. URL 重定向机制

    由于存在上述三种 URL 重定向机制,那么在多种方法同时设定的情况下,哪种方法会首先起作用呢?优先级顺序如下: HTTP 协议的重定向机制永远最先触发,即便是在没有传送任何页面--也就没有页面被(客户 ...

  5. Micro Frontends 微前端

    Micro Frontends https://martinfowler.com/articles/micro-frontends.html Integration approaches Server ...

  6. Xctf-easyapk

    Xctf-easyapk Write UP 前期工作 查壳 无壳 运行 没什么特别的 逆向分析 使用jadx反编译查看代码 先看看文件结构 MainActivity代码 public class Ma ...

  7. Tomcat优化,JNDI,连接池,数据源

    什么是JNDI? JNDI的简单应用 什么是连接池技术? 连接池 性能 连接池技术与传统数据库连接的比较 连接池技术工作原理 为什么使用连接池? 传统数据库连接方式的不足 企业级开发需要稳健和高效的数 ...

  8. Linux忽略大小写的查找技巧(转)

    1.vim 中的查找 Linux 下 vim搜索文件内容时加上 \c 参数可以忽略搜索字符的大小写. 比如用vim 搜索文件中的 China 时 可用 :/china\c 2. find 查找 Lin ...

  9. HDU-4773 Problem of Apollonius (圆的反演)

    参考: https://oi-wiki.org/geometry/inverse/ https://blog.csdn.net/acdreamers/article/details/16966369 ...

  10. 1152 Google Recruitment

    题干前半略. Input Specification: Each input file contains one test case. Each case first gives in a line ...