【贪心算法】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

python之知识图谱(Neo4j)

一、安装方式 1.1 windows安装         安装方式因系统的不同而不同,Neo4j 支持 Linux, Mac,Windows。 安装又离不开官网,官网地址:https://neo4j.com/。因为我是windows操作系统,所以,这次先讲windows的。如何后面涉及到Linux系统的,再进行更新。         我下载的版本是:neo4j-desktop-2.1.0-x64.exe, 也可以去国内的其他站点找找资源。  注意:这个安装有点奇怪,双击直接是安装中,安装目录不可选。                 二、运行 2.1 windows运行     先创建一个实例: 浏览器访问WEB, 地址:Neo4j Browserhttp://localhost:7474/browser/ 三、核心概念 在操作前先理解 Neo4j 的核心模型: 概念说明节点(

By Ne0inhk
OpenClaw 钉钉群聊多机器人配置完全指南

OpenClaw 钉钉群聊多机器人配置完全指南

OpenClaw 钉钉群聊多机器人配置完全指南 在团队协作中,配置多个专用机器人可以显著提升工作效率——不同的机器人可以分别负责写作、编码、数据分析等不同任务。本文将详细介绍如何在使用OpenClaw的钉钉群聊中配置多个任务机器人,并进一步讲解如何为每个机器人赋予独特的性格和工作规范。 一、钉钉端配置 首先,我们需要在钉钉开放平台创建多个任务机器人。 1.1 创建机器人 1. 按照上述步骤,根据实际需求创建多个机器人。 机器人创建完成后,务必记下 Client ID 和 Client Secret,这些信息后续配置会用到。 访问 钉钉开发者平台,点击立即创建按钮创建任务机器人。 二、OpenClaw端配置 完成钉钉端的配置后,接下来我们在OpenClaw中进行相应的设置(默认已装过钉钉插件)。 # 安装钉钉渠道插件 openclaw plugins install @dingtalk-real-ai/dingtalk-connector # 重启 gateway openclaw gateway restart 2.1 添加 Agent

By Ne0inhk
Spring Web MVC 入门秘籍:从概念到实践的快速通道(上)

Spring Web MVC 入门秘籍:从概念到实践的快速通道(上)

个人主页:♡喜欢做梦 欢迎  👍点赞  ➕关注  ❤️收藏  💬评论 目录 一、什么是Spring Web MVC? 1.定义 2.关于MVC 2.1什么是MVC? 二、学习Sring MVC 1.项目准备 2.@RestController注解的介绍 3.@RequestMapping注解 1.@RequestMapping只用在类上(相当于“只给文件夹起名,不给文件起名”) 2.@RequestMapping只用在方法上(相当于“只给文件起名,不给文件夹起名”) 3.@RequestMapping用在类和方法上(相当于给文件夹和文件都取名) 三、Postman 1.什么是Postman? 2.关于API 3.传参介绍 1.普通传参:

By Ne0inhk

从零到实战:Go 语言高效学习路线

Go 语言(Golang)以 “简洁、高效、并发友好” 为核心优势,学习门槛低于 C++/Java,且生态聚焦云原生、微服务等热门场景,适合零基础或转语言开发者快速上手。以下是一套 “基础入门→核心深化→实战落地→生态拓展” 的系统化学习路线,兼顾效率与实用性,帮你少走弯路。 一、前期准备:明确目标与环境搭建(1-2 天) 1. 明确学习目标 先锁定核心应用场景(避免盲目学习),推荐优先级: * 入门首选:后端 API 开发(最易落地,适合练手); * 进阶方向:云原生(Docker/K8s 周边)、微服务、网络编程; * 避免一开始挑战高难度场景(如底层并发原理、GC 调优)。 2.

By Ne0inhk