当前位置: 首页 > news >正文

【C++刷题】优选算法——贪心第三辑

  1. 坏了的计算器
    在这里插入图片描述
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;
}
  1. 合并区间
    在这里插入图片描述
    区间问题,先排序
    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;}
  1. 无重叠区间
    在这里插入图片描述
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;
}
  1. 用最少数量的箭引爆气球
    在这里插入图片描述
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;
}
  1. 整数替换
    在这里插入图片描述
// 推荐解法一
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;}
};
  1. 俄罗斯套娃信封问题
    在这里插入图片描述
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();}
};
  1. 可被三整除的最大和
    在这里插入图片描述
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;}}}
};
  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;}
};
  1. 重构字符串
    在这里插入图片描述
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; }合并区间 区间问题&#xff0c;先排序 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消息的示例代码&#xff1a; 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对象中&#xff0c;使其下辖的组件可以随时随地访问这些数据&#xff0c;省去了逐层传递的步骤。 相对于在组件里挖槽&#xff08;比如{props.children}&#xff09;&#xff0c;使用Context应该更注重随时随…...

在S/4HANA OP 1511中激活嵌入式分析的基本配置

大家好&#xff0c;在这篇博客中&#xff0c;我将讨论在 S/4HANA On-Premise 1511 版本中激活嵌入式分析的基本配置。本博客主要关注Fiori前端系统和S/4HANA后端系统的分离安装。让我们深入了解一下。 景观 前端系统 SAP Fiori for S/4HANA OP 1511 Bakend系统SAP S/4HANA后…...

好的提交 VS. 坏的提交 :Git 的最佳实践

在软件或网页开发的精彩世界中&#xff0c;版本控制是每个与其他开发者合作项目的开发者必备的工具。Git 是最常用的版本控制系统之一&#xff0c;它帮助开发者跟踪变更、有效地回到之前的状态&#xff0c;并在项目中进行团队协作。但是&#xff0c;Git 的工作只有在正确管理提…...

MySQL第4讲--图像化界面工具DataGrip介绍

文章目录 前言DataGrip的下载DataGrip安装DataGrip连接数据库DataGrip使用创建数据库创建表修改表 DataGrip中编写SQL语句操作数据库 前言 在第二讲MySQL第2讲–关系型数据库以及SQL语句分类之DDL数据库和表的操作和第三讲MySQL第3讲–数据类型和表的修改和删除的介绍当中所有的…...

Curl工具小记

curl 是一个非常强大且灵活的命令行工具&#xff0c;用于获取或发送数据&#xff0c;无需用户图形界面交互。它支持多种协议&#xff0c;并且可以在脚本中使用&#xff0c;以实现自动化任务。 基本介绍 curl 是 “Client URL” 的缩写&#xff0c;它是一个利用 URL 语法在命令…...

【C#语音文字互转】C#语音转文字(方法一)

Whisper.NET开源项目&#xff1a;https://github.com/sandrohanea/whisper.net/tree/main 一. 环境准备 在VS中安装 Whisper.net&#xff0c;在NuGet包管理器控制台中运行以下命令&#xff1a; Install-Package Whisper.net Install-Package Whisper.net.Runtime其中运行时包…...

基于Linux系统下的在线手机商城

项目背景 随着网络的发展&#xff0c;电子商务的兴起和普及使得消费者越来越倾向于通过互联网购买商品和服务&#xff0c;越来越多的传统零售商和新兴企业转向在线销售以满足消费者的需求&#xff0c;个成功的在线商城项目背景包括对市场需求、竞争环境、技术和平台选择、商业…...

Apache Kafka 事务详解

Apache Kafka 事务详解 Apache Kafka 是一个分布式流处理平台&#xff0c;主要用于实时数据的传输和处理。在现代的数据密集型应用中&#xff0c;事务性保证在数据传输和处理中的作用至关重要。本文将详细介绍 Kafka 的事务性支持&#xff0c;包括其基本概念、架构、使用方法以…...

Go语言 结构体

本文主要为Go语言 结构体介绍、语法、使用注意及其示例。 目录 结构体 语法 语法示例 语法说明 声明使用 创建并赋值 使用指针 使用注意 总结 结构体 C语言里面&#xff0c;我们可以使用typedef in MyInt。 在go语言中使用结构体来模拟类&#xff0c;使用type stru…...

数据结构(邓俊辉)学习笔记】词典 03—— 排解冲突(1)

文章目录 1. 一山二虎2. 泾渭分明3. 开放定址4. 线性试探5. 赖惰删除 1. 一山二虎 此前我们已经多次指出&#xff0c;对于需要动态维护的散列表冲突是不可避免的&#xff0c;无论你的散列函数设计的有多么精妙&#xff0c;因此我们不得不回答的第二个重要问题就是一旦发生冲突&…...

HTML5+CSS3-HTML5入门

1.web标准 W3C为web标准化做出了以下事项&#xff0c;主要包括结构&#xff0c;表现和行为。 结构用于对网页的信息进行分类和整理&#xff0c;使用技术包括HTML,XML,XHTML 表现指网页的外在样式&#xff0c;一般包括网页的版式&#xff0c;颜色&#xff0c;字体&#xff0c…...

谷粒商城实战笔记-138-商城业务-首页-渲染二级三级分类数据

本节的主要内容是在前一节的基础上&#xff0c;提供结构查询出所有的二级、三级分类数据。 一&#xff0c;构造响应体数据结构 后端返回给前端的数据结构是在开发详细设计中应该确定的内容。 分析前端需要的数据结构&#xff0c;后端要将所有一级分类包含的二级和三级分类信…...

git的基础用法

文章目录 前言关联仓库提交代码分支操作账号免密 前言 记录一下git的一些基础用法。 关联仓库 # 初始化 git init# 关联仓库 git remote add origin <仓库地址># 查看当前关联的仓库 git remote -v# 一次只能remote一个&#xff0c;要换需要先删原来的 git remote rem…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...