【C++刷题】优选算法——贪心第三辑
- 坏了的计算器

int brokenCalc(int startValue, int target) {int step = 0;while (target > startValue) {if (target % 2 == 0) target /= 2;else target += 1;++step;}return step + startValue - target;
}
- 合并区间

区间问题,先排序
vector<vector<int>> merge(vector<vector<int>>& intervals) {ranges::sort(intervals, [](vector<int>& left, vector<int>& right){return left[0] < right[0];});vector<vector<int>> ret;vector<int> tmp = intervals[0];for (int i = 1; i < intervals.size(); ++i) {if (intervals[i][0] <= tmp[1]) {tmp[1] = max(tmp[1], intervals[i][1]);} else {ret.push_back(tmp);tmp = intervals[i];}}ret.push_back(tmp);return ret;}
- 无重叠区间

int eraseOverlapIntervals(vector<vector<int>>& intervals) {ranges::sort(intervals);int right = intervals[0][1], count = 0;for (int i = 1; i < intervals.size(); ++i) {if (intervals[i][0] < right) {if (intervals[i][1] < right) {right = intervals[i][1];}++count;} else {right = intervals[i][1];}}return count;
}
- 用最少数量的箭引爆气球

int findMinArrowShots(vector<vector<int>>& points) {ranges::sort(points);int right = points[0][1], count = 1;for (int i = 1; i < points.size(); ++i) {if (points[i][0] <= right) {right = min(right, points[i][1]);} else {++count;right = points[i][1];}}return count;
}
- 整数替换

// 推荐解法一
class Solution {unordered_map<int, int> memo;
public:int integerReplacement(long long n) {if (memo.count(n)) return memo[n];if (n == 1) {memo[n] = 0;return memo[n];}if (n % 2 == 0) {memo[n] = integerReplacement(n / 2) + 1;return memo[n];} else {memo[n] = min(integerReplacement(n + 1), integerReplacement(n - 1)) + 1;return memo[n];}}
};// 解法二
/*
二进制知识:
偶数:二进制表示的最后一位为 0
奇数:二进制表示的最后一位为 1
除 2 操作:二进制表示统一右移一位
*/
class Solution {
public:int integerReplacement(long long n) {int count = 0;while (n != 1) {if (n % 2 == 0) {n /= 2;++count;} else {if (n == 3) {n = 1;count += 2;}else if (n % 4 == 1) {n -= 1;++count;} else {n += 1;++count;}}}return count;}
};
- 俄罗斯套娃信封问题

class Solution {
public:int maxEnvelopes(vector<vector<int>>& envelopes) {ranges::sort(envelopes, [](vector<int>& left, vector<int>& right){return left[0] != right[0] ? left[0] < right[0] : left[1] > right[1];});vector<int> v = { envelopes[0][1] };int n = envelopes.size();for (int i = 1; i < n; ++i) {if (envelopes[i][1] < v.back()) {int left = 0, right = v.size() - 1;while (left < right) {int mid = left + (right - left) / 2;if (v[mid] < envelopes[i][1]) {left = mid + 1;} else {right = mid;}}v[left] = envelopes[i][1];} else if (envelopes[i][1] > v.back()) {v.push_back(envelopes[i][1]);}}return v.size();}
};
- 可被三整除的最大和

class Solution {
public:int maxSumDivThree(vector<int>& nums) {int sum = 0;int min_1 = INT_MAX, sec_1 = INT_MAX, min_2 = INT_MAX, sec_2 = INT_MAX;for (int e : nums) {sum += e;if (e % 3 == 1) {if (e < min_1) {sec_1 = min_1;min_1 = e;} else if (e < sec_1) {sec_1 = e;}} else if (e % 3 == 2) {if (e < min_2) {sec_2 = min_2;min_2 = e;} else if (e < sec_2) {sec_2 = e;}}}if (sum % 3 == 0) {return sum;} else if (sum % 3 == 1) {if (min_1 !=INT_MAX && sec_2 !=INT_MAX) {return max(sum - min_1, sum - min_2 - sec_2);} else if (min_1 !=INT_MAX) {return sum - min_1;} else {return sum - min_2 - sec_2;}} else {if (min_2 !=INT_MAX && sec_1 !=INT_MAX) {return max(sum - min_2, sum - min_1 - sec_1);} else if (min_2 !=INT_MAX) {return sum - min_2;} else {return sum - min_1 - sec_1;}}}
};
- 距离相等的条形码

class Solution {
public:vector<int> rearrangeBarcodes(vector<int>& barcodes) {ranges::sort(barcodes);int num = barcodes[0], count = 1, left = 0, right = 1;while (right < barcodes.size()) {if (barcodes[right] == barcodes[left]) {++right;} else {if (right - left > count) {count = right - left;num = barcodes[left];}left = right;++right;}}if (right - left > count) {count = right - left;num = barcodes[left];}vector<int> ret(barcodes.size());int i = 0;while (count) {ret[i] = num;--count;i += 2;}for (int j = 0; j < barcodes.size(); ++j) {if (i >= ret.size()) i = 1;if (barcodes[j] != num) {ret[i] = barcodes[j];i += 2;}}return ret;}
};
- 重构字符串

class Solution {
public:string reorganizeString(string s) {ranges::sort(s);char max_c = s[0];int count = 1, left = 0, right = 1;while (right < s.size()) {if (s[right] == s[left]) {++right;} else {if (right - left > count) {count = right - left;max_c = s[left];}left = right;++right;}}if (right - left > count) {count = right - left;max_c = s[left];}if (count > (s.size() + 1) / 2) return "";string ret = s;int i = 0;while (count) {ret[i] = max_c;--count;i += 2;}for (int j = 0; j < s.size(); ++j) {if (i >= ret.size()) i = 1;if (s[j] != max_c) {ret[i] = s[j];i += 2;}}return ret;}
};
相关文章:
【C++刷题】优选算法——贪心第三辑
坏了的计算器 int brokenCalc(int startValue, int target) {int step 0;while (target > startValue) {if (target % 2 0) target / 2;else target 1;step;}return step startValue - target; }合并区间 区间问题,先排序 vector<vector<int>>…...
9.2 grafana 上导入模板看图并讲解告警
本节重点介绍 : 添加到prometheus采集配置中grafana 上导入process-exporter dashboard重点指标讲解 添加到prometheus采集配置中 - job_name: process-exporterhonor_timestamps: truescrape_interval: 15sscrape_timeout: 10smetrics_path: /metricsscheme: httpstatic_con…...
python实现自动回复消息
本文使用创作助手。 下面是一个使用uiautomation库实现自动回复QQ消息的示例代码: import time import uiautomation as autodef auto_reply():# 打开QQauto.uiautomationhelper.ShellExecute(r"C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe&quo…...
Mysql 脚本转换为drawio ER 脚本
Navicat 导出数据库脚本 通过代码转换脚本 import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** SQL 脚本转换为 drawio ER 脚本*/ pu…...
基于babylonjs的小游戏 跳一跳
源码地址...
移动端下拉加载更多(h5,小程序)
1.h5,使用原生方式监听页面滚动下拉加载更多 <template><div></div> </template><script> export default {data() {return {loadflag: true,maxpages: 0, //最大页码currentpage: 0, //当前页listData: [],config: {page: 1,pageSize: 15,tota…...
Linux安全与高级应用(二)Linux Web服务器的安全配置与高级应用
文章目录 Linux Web服务器的安全配置与高级应用一、HTTPD服务的基本配置1.1 HTTPD服务简介1.2 HTTPD配置文件 二、Web服务的访问控制2.1 客户端地址限制2.2 用户授权限制 三、构建虚拟Web主机3.1 虚拟主机简介3.2 基于域名的虚拟主机3.3 基于IP地址的虚拟主机3.4 基于端口的虚拟…...
关于React.createContext全局注入的一些记录
一、React Context 原理 简单地说就是可以将一些数据注入到Context对象中,使其下辖的组件可以随时随地访问这些数据,省去了逐层传递的步骤。 相对于在组件里挖槽(比如{props.children}),使用Context应该更注重随时随…...
在S/4HANA OP 1511中激活嵌入式分析的基本配置
大家好,在这篇博客中,我将讨论在 S/4HANA On-Premise 1511 版本中激活嵌入式分析的基本配置。本博客主要关注Fiori前端系统和S/4HANA后端系统的分离安装。让我们深入了解一下。 景观 前端系统 SAP Fiori for S/4HANA OP 1511 Bakend系统SAP S/4HANA后…...
好的提交 VS. 坏的提交 :Git 的最佳实践
在软件或网页开发的精彩世界中,版本控制是每个与其他开发者合作项目的开发者必备的工具。Git 是最常用的版本控制系统之一,它帮助开发者跟踪变更、有效地回到之前的状态,并在项目中进行团队协作。但是,Git 的工作只有在正确管理提…...
MySQL第4讲--图像化界面工具DataGrip介绍
文章目录 前言DataGrip的下载DataGrip安装DataGrip连接数据库DataGrip使用创建数据库创建表修改表 DataGrip中编写SQL语句操作数据库 前言 在第二讲MySQL第2讲–关系型数据库以及SQL语句分类之DDL数据库和表的操作和第三讲MySQL第3讲–数据类型和表的修改和删除的介绍当中所有的…...
Curl工具小记
curl 是一个非常强大且灵活的命令行工具,用于获取或发送数据,无需用户图形界面交互。它支持多种协议,并且可以在脚本中使用,以实现自动化任务。 基本介绍 curl 是 “Client URL” 的缩写,它是一个利用 URL 语法在命令…...
【C#语音文字互转】C#语音转文字(方法一)
Whisper.NET开源项目:https://github.com/sandrohanea/whisper.net/tree/main 一. 环境准备 在VS中安装 Whisper.net,在NuGet包管理器控制台中运行以下命令: Install-Package Whisper.net Install-Package Whisper.net.Runtime其中运行时包…...
基于Linux系统下的在线手机商城
项目背景 随着网络的发展,电子商务的兴起和普及使得消费者越来越倾向于通过互联网购买商品和服务,越来越多的传统零售商和新兴企业转向在线销售以满足消费者的需求,个成功的在线商城项目背景包括对市场需求、竞争环境、技术和平台选择、商业…...
Apache Kafka 事务详解
Apache Kafka 事务详解 Apache Kafka 是一个分布式流处理平台,主要用于实时数据的传输和处理。在现代的数据密集型应用中,事务性保证在数据传输和处理中的作用至关重要。本文将详细介绍 Kafka 的事务性支持,包括其基本概念、架构、使用方法以…...
Go语言 结构体
本文主要为Go语言 结构体介绍、语法、使用注意及其示例。 目录 结构体 语法 语法示例 语法说明 声明使用 创建并赋值 使用指针 使用注意 总结 结构体 C语言里面,我们可以使用typedef in MyInt。 在go语言中使用结构体来模拟类,使用type stru…...
数据结构(邓俊辉)学习笔记】词典 03—— 排解冲突(1)
文章目录 1. 一山二虎2. 泾渭分明3. 开放定址4. 线性试探5. 赖惰删除 1. 一山二虎 此前我们已经多次指出,对于需要动态维护的散列表冲突是不可避免的,无论你的散列函数设计的有多么精妙,因此我们不得不回答的第二个重要问题就是一旦发生冲突&…...
HTML5+CSS3-HTML5入门
1.web标准 W3C为web标准化做出了以下事项,主要包括结构,表现和行为。 结构用于对网页的信息进行分类和整理,使用技术包括HTML,XML,XHTML 表现指网页的外在样式,一般包括网页的版式,颜色,字体,…...
谷粒商城实战笔记-138-商城业务-首页-渲染二级三级分类数据
本节的主要内容是在前一节的基础上,提供结构查询出所有的二级、三级分类数据。 一,构造响应体数据结构 后端返回给前端的数据结构是在开发详细设计中应该确定的内容。 分析前端需要的数据结构,后端要将所有一级分类包含的二级和三级分类信…...
git的基础用法
文章目录 前言关联仓库提交代码分支操作账号免密 前言 记录一下git的一些基础用法。 关联仓库 # 初始化 git init# 关联仓库 git remote add origin <仓库地址># 查看当前关联的仓库 git remote -v# 一次只能remote一个,要换需要先删原来的 git remote rem…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
