news 2026/10/18 14:53:12

cpp算法题目整理——贪心篇2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cpp算法题目整理——贪心篇2
最短距离
题目描述:

在一条一维的直线上,存在着 n 台显示器和 n 个电源插座。老师给小蓝布置了个任务:负责将每台显示器通过电源线与一个插座相连接(每个插座最多只能给一台显示器供电);同时,老师希望所消耗的电源线的长度尽可能的少,请你帮小蓝计算下电源线的最小消耗长度为多少?

为了便于计算,你只需要考虑直线距离即可。

解题思路:

贪心思路,序号最小的显示器连接序号最小的插座这样下来最终的距离一定是最小,用vector定义两个long long数组分别存储显示器序号和插座序号,使用vetcor能够直接调用sort进行排序,即sort(x.begin(),x.end()); 然后让对应位置的x[i] y[i] 相减并取绝对值即可,累加到distance上输出。

#include <iostream> #include <vector> #include <cmath> #include <algorithm> using namespace std; int main(){ int n; cin >> n; //定义两个vector 后边可以用来直接排序 vector<long long> x(n); vector<long long> y(n); //分别输入显示器和插座的位置 for(int i = 0; i < n; i++){ cin >> x[i]; } for(int i = 0; i < n; i++){ cin >> y[i]; } //位置最小的显示器连接位置最小的插座 这样一定是最小 long long dis = 0; //对显示器和插座分别排序,确保最小对应最小 sort(x.begin(),x.end()); sort(y.begin(),y.end()); //注意要用绝对值 for(int i = 0; i < n; i++){ dis += abs(x[i] - y[i]); } cout << dis << endl; return 0; }
画展布置
题目描述:
解题思路:

这个题目主要是用滑动窗口解决,即去遍历排好序的vector,看看长度为m的序列那个满足最小的要求,为什么只用最后一项减去第一项呢? 这个涉及到一个数学公式,把这个式子展开之后满足裂项相消,能够简化计算步骤,消掉之后就只剩下最后一项的平方减去第一项的平方,减少计算量,然后遍历长度为m的窗口,取最小值输出就行了。 为什么要用滑动窗口呢?因为对于有些连续的数字他的平方差比看起来小的数字更小,比如1,10,11,12,1000;如果取前三项最小的,那平方之后相减就是120,但是如果选择10,11,12,那相减之后就是44,所以才要用滑动窗口遍历整个数组找到最小的值。

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ int n, m; cin >> n >> m; //定义vector方便排序 vector<long long> x(n); for(int i = 0; i < n; i++){ cin >> x[i]; } //从小到大排序 sort(x.begin(), x.end()); //初始化l 最好的情况就是这个值 long long l = x[m - 1] * x[m - 1] - x[0] * x[0]; //滑动窗口 长度为m //遍历长度为m的序列 取cur和l的最小值 for(int i = 0; i <= n - m; i++){ long long cur = x[i + m - 1] * x[i + m - 1] - x[i] * x[i]; l = min(cur, l); } cout << l << endl; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 14:52:18

Claude Code这三个高频快捷键,让你少走很多弯路

先说一个我踩过的坑 有一次我在 Claude Code 里敲了一大段提示词&#xff0c;结果发现开头写错了。我下意识地按了 CtrlU&#xff0c;想删掉整行重来。然后我后悔了&#xff0c;想把刚才删掉的东西找回来。按了 CtrlZ&#xff0c;没反应。按了 CtrlY&#xff0c;也没反应。 我盯…

作者头像 李华
网站建设 2026/10/18 14:52:11

钓鱼邮件识别模型实战:TF-IDF特征工程与分类器调优

简介&#xff1a;这份资源面向网络安全初学者与机器学习实践者&#xff0c;聚焦钓鱼网站与钓鱼邮件的自动识别问题&#xff0c;提供一套可运行的建模方案。包内共14个文件&#xff0c;以10个Python脚本和4个CSV数据集为主&#xff0c;压缩包约339KB&#xff0c;脚本覆盖数据预处…

作者头像 李华
网站建设 2026/10/18 14:52:07

DolphinScheduler集成Kafka与Flink:构建定时调度与实时计算全链路

1. 项目概述&#xff1a;Dolphinscheduler 与 Flink 是怎么串起来的最近在做一个订单事件流处理的项目&#xff0c;业务侧要求既能按时触发数据生产任务&#xff0c;又希望下游的实时计算任务稳定消费消息。我搭了一套基于 DolphinScheduler Standalone 单机部署的调度环境&…

作者头像 李华
网站建设 2026/10/18 14:51:36

深入理解C++ Move语义:从右值引用到移动构造的实战指南

有一回我帮团队做代码评审&#xff0c;看到某个模块的请求处理函数里写着这样的代码&#xff1a;把一个大对象塞进vector之前&#xff0c;前面加了个std::move&#xff0c;后面又继续对同一个对象做读写操作。结果线上出现偶发数据错乱&#xff0c;排查了整整两天&#xff0c;最…

作者头像 李华
网站建设 2026/10/18 14:47:32

Vue3+FastAPI+Neo4j知识图谱网页应用全栈开发实践

简介&#xff1a;知识图谱以图结构组织实体与关系&#xff0c;是现代智能应用的重要基础设施。图数据库作为其核心存储引擎&#xff0c;通过节点和边原生表达复杂关联&#xff0c;避免关系型数据库多表JOIN的性能瓶颈。Cypher查询语言则提供声明式图遍历能力&#xff0c;让深度…

作者头像 李华
网站建设 2026/10/18 14:47:32

JQuickExcel 批量导入:用 importDataInBatch 控制大文件消费边界

JQuickExcel 批量导入&#xff1a;用 importDataInBatch 控制大文件消费边界 tags: #JQuickExcel #JavaExcel #开源 #POI #Excel工具 更多示例: JQuick-Excel 官网示例 https://www.jquick.org/jquick-excel/#demo-formulas0005 简介 我处理大 Excel 导入时&#xff0c;最先…

作者头像 李华