C语言学习--练习3(贪心)

目录

贪心算法

1. 两数对之间的最大乘积差

 2.三角形的最大周长

3.数组拆分

4.救生艇

 5.发送饼干

6.摆动数组


贪心算法

概念定义
        所谓贪心,总是做出在当前看来是最好的选择。也就是说,不从整体最优上进行考虑,算法得到的是在某种意义上的局部最优解。
        比如,对于一个全是正整数的数组,我要找到其中两个数,使得它们的乘积最大,毫无疑问,一定是取最大和次大的两个数进行相乘,得到的结果最大。这个就是贪心思想。
那么接下来,让我们做几道例题,来真正了解一下贪心。

1. 两数对之间的最大乘积差

int cmp(const void *a,const void *b){return *(int*)a-*(int*)b;
}
int maxProductDifference(int* nums, int numsSize){qsort(nums,numsSize,sizeof(int),cmp);//排序int n=numsSize;return abs(nums[n-1]*nums[n-2]-nums[0]*nums[1]);//贪心,直接取最前最后两个乘积差
}/*
//直接找最大的两个数ab和最小的两数cd
int maxProductDifference(int* nums, int numsSize) {int a = 0, b = 0, c = 10001, d = 10001, i, t;for (i = 0; i < numsSize; i++) {t = nums[i];if (t > a)b = a, a = t;else if (t > b)b = t;if (t < d)c = d, d = t;else if (t < c)c = t;}return a * b - c * d;
}
*/

 2.三角形的最大周长

//遇到数组题目的第一件事就是先排序!!!
int cmp(const void *a,const void *b){return *(int*)a-*(int*)b;
}
//有些时候不要想太复杂了
int largestPerimeter(int* nums, int numsSize) {qsort(nums,numsSize,sizeof(int),cmp);//贪心找出边长最大的三个边for(int i=numsSize-1;i>1;i--){if(nums[i]<nums[i-1]+nums[i-2]){return nums[i]+nums[i-1]+nums[i-2];}}return 0;
}

3.数组拆分

 

//想想思路,在数对中取min后之和要最大,
//是不是感觉直接排序后取欸者的两个为一对就可以了
//直接试试(贪心)
//为什么证明过程相当复杂,
int cmp(const void*a,const void*b){return *(int*)a-*(int*)b;
}
int arrayPairSum(int* nums, int numsSize) {qsort(nums,numsSize,sizeof(int),cmp);int ans=0;for(int i=0;i<numsSize;i=i+2){//数对左边的是较小的minans=ans+nums[i];}return ans;
}

 证明过程如下:
. - 力扣(LeetCode)

4.救生艇

int cmp(const void *a,const void *b){return *(int*)a-*(int*)b;
}
//贪心算法,两个人一条船,船少,
/*
方法一:贪心
要使需要的船数尽可能地少,应当使载两人的船尽可能地多。设 people\textit{people}people 的长度为 nnn。考虑体重最轻的人:若他不能与体重最重的人同乘一艘船,那么体重最重的人无法与任何人同乘一艘船,
此时应单独分配一艘船给体重最重的人。从 people 中去掉体重最重的人后,
我们缩小了问题的规模,变成求解剩余 n−1个人所需的最小船数,将其加一即为原问题的答案。若他能与体重最重的人同乘一艘船,那么他能与其余任何人同乘一艘船,
为了尽可能地利用船的承载重量,选择与体重最重的人同乘一艘船是最优的。
从people 中去掉体重最轻和体重最重的人后,
我们缩小了问题的规模,变成求解剩余 n−2个人所需的最小船数,将其加一即为原问题的答案。*/
int numRescueBoats(int* people, int peopleSize, int limit) {qsort(people,peopleSize,sizeof(int),cmp);int ans=0;int light=0,heavy=peopleSize-1;for(;light<=heavy;){if(people[heavy]+people[light]<=limit){//可以坐下最重的一个人+一个人ans++;light++;heavy--;}else{//坐不下ans++;heavy--;}//我看谁能和现在最轻的人一起}return ans;
}

 5.发送饼干

//不管不管,拿到数组先排序
int cmp(const void*a,const void *b){return *(int *)a-*(int*)b;
}int findContentChildren(int* g, int gSize, int* s, int sSize) {qsort(g,gSize,sizeof(int),cmp);qsort(s,sSize,sizeof(int),cmp);int ans=0,i=0,j=0;while(i<gSize&&j<sSize){if(g[i]<=s[j]){ans++;i++;j++;}else{j++;}}return ans;
}

6.摆动数组

 


// 1 2 3 4 5 6 7 8 
//4  3  2  1
//  8  7  6  5
static int cmp(const void *pa, const void *pb) {return *(int *)pa - *(int *)pb;
}void wiggleSort(int* nums, int numsSize) {int * arr = (int *)malloc(sizeof(int) * numsSize);memcpy(arr, nums, sizeof(int) * numsSize);qsort(arr, numsSize, sizeof(int), cmp);int x = (numsSize + 1) / 2;for (int i = 0, j = x - 1, k = numsSize - 1; i < numsSize; i += 2, j--, k--) {nums[i] = arr[j];if (i + 1 < numsSize) {nums[i + 1] = arr[k];}}free(arr);
}

 这题相当复杂,原理就是把前一半数重大到小插入偶数位,后一半的数重大到小插入奇数位,然后可以实现中间的数大于左右两边的数。具体为什么我也不晓得,证明过程太复杂不想看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识C++编程语言(万字详解)

目录 ::域作用限定符 命名空间域(namespace)&#xff1a; 流插入和流提取&#xff08;C的输入输出&#xff09; 缺省参数&#xff1a; 函数重载&#xff1a; 引用&#xff1a; 内联函数&#xff1a; auto关键字&#xff1a; 1、类型思考&#xff1a; 2、auto介绍&am…

【二十九】springboot高并发示例

本章演示在springboot项目中的高并发demo&#xff0c;演示导致的问题&#xff0c;以及单机部署下的解决方案和集群部署下的解决方式以及分布式下的解决方案。 目录 一、单机模式下高并发问题 二、集群模式下高并发问题 一、单机模式下高并发问题 前提&#xff1a;先写一个减扣…

腾讯云轻量服务器流量用完了怎么办?停机吗?

腾讯云轻量服务器流量用完了怎么办&#xff1f;超额流量另外支付流量费&#xff0c;流量价格为0.8元/GB&#xff0c;会自动扣你的腾讯云余额&#xff0c;如果你的腾讯云账号余额不足&#xff0c;那么你的轻量应用服务器会面临停机&#xff0c;停机后外网无法访问&#xff0c;继…

创建数据表

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 如果要进行数据表的创建 create table 表名称 (列名称 类型 [DEFAULT 默认值 ] ,列名称 类型 [DEFAULT 默认值 ] ,列名称 类型 [DEFAULT 默认值 ] ,...列名称 类型 [DEFAULT 默认值 ] )…

Yolov8涨点神器:添加可变形大核注意力,超越自注意力,实现暴力涨点(附代码)

目录 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; 可变形大核注意力(D-LKA Net) deformable_LKA引入到yolov8 核心代码 yaml文件 DeformableConv2d ⭐欢迎大家订阅我的专栏一起学习⭐ &a…

力扣由浅至深 每日一题.01 两数之和

万物惊鸿&#xff0c;唯我澄明 —— 24.3.9 1. 两数之和https://leetcode.cn/problems/two-sum/ 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会…

猫头虎分享已解决Bug || 系统监控故障:MonitoringServiceDown, MetricsCollectionError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

“比特币深夜冲破7万美元”!华尔街押注比特币:究竟是牛市墙头草,还是加密真信徒?

比特币ETF&#xff0c;使此次加密牛市与以往的繁荣、萧条周期截然不同。以往的周期往往由热衷风险的投机者以及最终崩盘的加密项目所驱动&#xff0c;例如无实物资产支持的加密货币借贷&#xff0c;以及一地鸡毛的ICO热潮。而现在&#xff0c;传统金融已经与加密世界联姻&#…

从零到一,构建坚如磐石的Redis 7高可用集群:全程实录与关键技术详解

1、引言 在日常的开发中&#xff0c;无论是主从复制还是哨兵模式&#xff0c;都在高并发的场景中存在致命的缺点&#xff1a; 主从复制&#xff1a;当Master Redis机器挂掉之后&#xff0c;Slave依旧可以读取数据&#xff0c;但是由于Master不能写数据了&#xff0c;所以就会…

python自动化测试如何做数据缓存 ?这个第三方包推荐给你,方便又简单!

1.数据缓存说明 数据缓存可以说也是项目开发中比不可少的一个工具 &#xff0c;像我们测试的系统中 &#xff0c;你都会见到像Redis一样的数据缓存库 。使用缓存数据库的好处不言而喻&#xff0c;那就是效率高 &#xff0c;简单数据直接放在缓存中 &#xff0c;存取简单方便 。…

每日OJ题_牛客CM26 二进制插入

目录 牛客CM26 二进制插入 解析代码 牛客CM26 二进制插入 二进制插入_牛客题霸_牛客网 解析代码 class BinInsert { public:int binInsert(int n, int m, int j, int i) {// 1 2 4 8 16 32 64 128 256 512 1014// 1024 2 4 32 // 1024 4 8 64 1024 76// 1000000000…

面向切面编程(AOP)介绍(横切关注点、通知(增强)、连接切入点、切面)

1. 面向切面编程思想AOP AOP&#xff1a;Aspect Oriented Programming面向切面编程 AOP可以说是OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09;的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构&#xff0c;用于模拟公…

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客&#xff1a;JavaEE进阶&#xff08;14&#xff09;Linux基本使用和程序部署&#xff08;博客系统部署&#xff09;-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

Intellij IDEA 中 git 操作的快捷键

1.添加新建的文件 即add 操作 shift alt a 2.提交操作 即 commit操作 ctrl k 在窗口中可以用feature来声明此次更新的内容 3.提交操作 即push操作 ctrl shift k 4.拉去远程分支操作 即pull操作 ctrl t

Spring学习 基础(三)MVC

5、Spring MVC 传统Web模式&#xff1a; Model:系统涉及的数据&#xff0c;也就是 dao 和 bean。View&#xff1a;展示模型中的数据&#xff0c;只是用来展示。Controller&#xff1a;处理用户请求都发送给 &#xff0c;返回数据给 JSP 并展示给用户。 随着 Spring 轻量级开发…

C if 语句

一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。 语法 C 语言中 if 语句的语法&#xff1a; if(boolean_expression) {/* 如果布尔表达式为真将执行的语句 */ }如果布尔表达式为 true&#xff0c;则 if 语句内的代码块将被执行。如果布尔表达式为 false&#xff0c;…

poll开发服务器

int poll(struct pollfd *fds, nfds_t nfds, int timeout); 函数说明&#xff1a;与select类似&#xff0c;委托内核监控可读&#xff0c;可写&#xff0c;异常事件。 函数说明&#xff1a; fds&#xff1a;一个struct pollfd结构体数组的首地址 struct pollfd { …

天猫淘宝详情接口API揭秘:实现个性化商品推荐!

天猫淘宝作为中国最大的电商平台&#xff0c;拥有庞大的商品库存和众多用户&#xff0c;为了提高用户购物体验并满足其个性化需求&#xff0c;天猫淘宝推出了详情接口API&#xff0c;通过智能算法实现个性化商品推荐。联讯数据将为您揭秘详情接口API的实现原理和功能。 个性化商…

信息抽取在旅游行业的应用:以景点信息抽取为例

开源项目推荐 今天先给大家推荐一个开源项目&#xff0c;多模态AI能力引擎平台: 免费的自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别、语音识别接口&#xff0c;功能强大&#xff0c;欢迎体验。 https://gitee.com/stonedtx/free-nlp-api 场景描述 在旅游行业…

【新书推荐】17.3 字符串操作举例

本节内容&#xff1a;字符串操作举例。 ■例3&#xff1a;接收字符串去掉空格后逆向输出&#xff0c;t17-3.asm。 ■例4&#xff1a;字符串拼接&#xff0c;t17-4.asm。 ■例5&#xff1a;判断子串&#xff0c;t17-5.asm。 17.3.1 例3&#xff1a;接收字符串去掉空格后逆向输出…