【贪心算法】day4

【贪心算法】day4

📝前言说明:

  • 本专栏主要记录本人的贪心算法学习以及LeetCode刷题记录,按专题划分
  • 每题主要记录:(1)本人解法 + 本人屎山代码;(2)优质解法 + 优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话);(4)贪心策略正确性的 “证明”
  • 文章中的理解仅为个人理解。如有错误,感谢纠错
🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C语言入门基础python入门基础C++学习笔记Linux
🎀ZEEKLOG主页 愚润泽

你可以点击下方链接,进行其他贪心算法题目的学习

点击链接开始学习
贪心day1贪心day2
贪心day3贪心day4
贪心day5贪心day6
贪心day7贪心day8
贪心day9贪心day10

也可以点击下面连接,学习其他算法

点击链接开始学习
优选专题动态规划
递归、搜索与回溯贪心算法

题单获取【贪心算法】题单汇总

题目


122. 买卖股票的最佳时机 II

题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/

在这里插入图片描述

个人解

思路:

  • 拆分成一天一天进行无限次交易
    • 后一天比当前股票便宜就重新买入,比当前股票贵就直接卖出 (贪心策略)
  • 细节: 因为可能出现连续递增,所以在卖出后,直接将当天价格作为买入的价格继续贪心
  • 其他解法:也可以用一个双指针去找每个上升区间的开始和结束位置,然后添加利润

屎山代码:

classSolution{public:intmaxProfit(vector<int>& prices){int PreMIN = INT_MAX;int ans =0;for(auto x: prices){if(x <= PreMIN) PreMIN = x;else{ ans += x - PreMIN; PreMIN = x;// 代表未买入状态,同时避免连续递增的股票}}return ans;}};

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)


1005. K 次取反后最大化的数组和

题目链接:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/

在这里插入图片描述

个人解

思路:

  • 有点数学题的感觉
    • 先将数组排序
    • 贪心策略:
      1. 从小到大,现将负数取反
      2. 如果没有负数了, 则 k % 2 。(如果结果为 1 ,则将绝对值最小的数取反)

屎山代码:

classSolution{public:intlargestSumAfterKNegations(vector<int>& nums,int k){ ranges::sort(nums);int sum =0;int Min = INT_MAX;for(auto num: nums){ Min =min(Min,abs(num));if(num <0&& k >0){ sum -= num; k--;}else sum += num;}if(k %2)// 如果还有取反次数,则剩下的一定为非负数了 sum -=2* Min;// 把之前加上的减掉return sum;}};

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( 1 ) O(1) O(1)


2418. 按身高排序

题目链接:https://leetcode.cn/problems/sort-the-people/description/

个人解

屎山代码:

classSolution{public: vector<string>sortPeople(vector<string>& names, vector<int>& heights){int n = names.size(); vector<pair<int,int>> hash;// <身高, 下标>, 存在vector中,便于后续排序for(int i =0; i < n; i++) hash.emplace_back(heights[i], i); ranges::sort(hash.begin(), hash.end(),[](constauto& a,constauto& b){return a.first > b.first;// 大的优先级高}); vector<string> ans;for(auto[h, index]: hash) ans.emplace_back(names[index]);return ans;}};

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( n ) O(n) O(n)


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

Read more

毕设开源 深度学习 YOLO 实现车牌识别算法

文章目录 * 0 前言 * 1 课题介绍 * 2 算法简介 * 2.1网络架构 * 3 数据准备 * 4 模型训练 * 5 实现效果 * 5.1 图片识别效果 * 5.2视频识别效果 * 6 部分关键代码 0 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目提供大家参考学习,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 🥇学长这里给一个题目综合评分(每项满分5分) * 难度系数:4分 * 工作量:4分 * 创新点:3分 🧿 选题指导, 项目分享:见文末 1 课题介绍 智能车牌识别是现代智能交通系统的重要组成部分, 广泛应用于高速公路、停车场、路口等场景。

By Ne0inhk
数据结构高分攻略:期末期中速成秘籍保证过!

数据结构高分攻略:期末期中速成秘籍保证过!

大致考点解析 * * * * * * * 有序和降序 二分查找 时间复杂度是多少 冒泡排序 从第三个数开始, 是前两个数的和 设计函数斐波那契数列计算第n项的程序 先序中序后续遍历 有向图和无向图的顶点的度的计算 二叉树五个基本性质 完全二叉树 KMP算法 算法的五大要点 数据结构的三要素 队列: 先进先出, 在队头队尾实现操作 (类似地铁) 栈: 先进后出, 只能在栈顶实现操作 (类似箱子) 栈和队列的特点 什么是逻辑结构和物理结构 考点 大题10分 编程题 统计40分 总共4题 每题10分 应用题 统计20分 总共10题 每题2分 填空题 统计30分 总共15题 每题2分 选择题 数据结构基本概念 * * * Data_Structure=(D, S), (D, R)中的R指的是数据关系 相互之间存在一种或多种特定关系的数据元素的集合 数据结构

By Ne0inhk
数据结构 | 队列:从概念到实战

数据结构 | 队列:从概念到实战

个人主页-爱因斯晨 文章专栏-数据结构 继续加油! 文章目录 * 个人主页-爱因斯晨 * 文章专栏-数据结构 * 一、队列的基本概念 * 二、队列的核心操作 * 三、C 语言实现队列 * 3.1 顺序队列(数组实现) * 3.2 链式队列(链表实现) * 四、队列的应用场景 * 五、两种实现的对比选择 一、队列的基本概念 队列是一种先进先出(FIFO,First In First Out) 的线性数据结构,仅允许在一端进行插入操作(队尾),另一端进行删除操作(队头)。 生活中的队列场景: * 银行窗口排队办理业务 * 打印机任务队列 * 消息队列中的消息传递 二、队列的核心操作 1. 初始化(InitQueue):创建一个空队列 2. 入队(

By Ne0inhk

轨迹数据压缩的Douglas-Peucker算法(附代码及原始数据)

机场出租车调度问题:数学建模实战解析 大家好!今天咱们来聊聊一个特别接地气的数学建模题目——机场的出租车调度问题。这是2019年全国大学生数学建模竞赛的C题,题目看着简单,实际上藏着不少玄机。咱们一起拆解这个题目,看看怎么用数学模型来解决现实生活中的难题。 问题背景:机场出租车的那些事儿 想象一下你刚从飞机下来,拖着行李箱走到出租车候客区,发现有两条队:一条是"短途专用通道",另一条是普通队。为什么会有这样的设计?背后其实是一套复杂的调度系统在运作。 题目给我们几个核心信息点: 1.大多数机场出租车司机会在"蓄车池"排队等待 2.机场管理人员会采集乘客目的地信息 3.对于短途乘客(比如目的地小于某个阈值d),会给司机"补偿"或安排他们优先接客 4.司机可以自主选择是否去"短途专用通道"排队 核心问题就是要我们设计一套合理的调度方案,在乘客等候时间、司机收益和机场管理效率之间找到平衡。 技术原理:排队论与博弈论的双剑合璧

By Ne0inhk