代码随想录打卡Day29
今天的题目尊嘟好难…除了第三题没看视频,其他的题目都是看了视频才做出来的。二刷等我。
134. 加油站
感觉这道题和之前的53. 最大子序和有点像,最大子序和是一旦当前总和为负数则立即抛弃当前的总和,从下个位置重新开始计算,而这道题是一旦遇到当前剩余的燃油小于0,则立马抛弃当前的燃油总和,以下个位置为新起点,当然这道题还需要计算遍历过的所有节点的燃油与损耗之差,万一循环结束current_sum>=0,但是total_sum<0也是不行的,所以在循环结束以后并不是判断current_sum是否大于0,因为有可能出现从0出发到不了第i个节点,从第i + 1个节点遍历到结束时current_sum >= 0,但是剩下的燃油+i节点前面的燃油坚持不到第i个节点的情况,综上,在循环结束以后应该判断total_sum是否大于等于0。
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int result = 0; //记录起始位置int current_sum = 0; //到达某个站点后剩余的油量int total_sum = 0; //记录所有能得到的油与消耗量之间的差值for(int i = 0; i < gas.size(); i++){current_sum += (gas[i] - cost[i]); //执行完这条语句后车子已经到达第i + 1个站点了total_sum += (gas[i] - cost[i]);if(current_sum < 0){result = i + 1;current_sum = 0;} }if(total_sum < 0) return -1; //已经遍历到末尾了,不可能跑一圈return result;}
};
135. 分发糖果
这道题我思路想到了,先从左往右遍历,处理一遍,再从后往前遍历一遍,再处理一遍,但是我在一些代码细节上没有想清楚,所以老是写不对,就很气。。。首先第一个代码细节是明确两次遍历的处理对象是谁,第一次从左往右遍历应该处理左边的值还是右边的值呢?我这里处理的是右边的值,代码是这么写的
//从左往右遍历(右边比左边大的情况)
for(int i = 1; i < ratings.size(); i++){if(ratings[i] > ratings[i - 1])v[i] = v[i - 1] + 1;
}
第二次遍历从右往左,由于前面遍历处理的是右值,反过来遍历的时候就必须处理左值,为什么?因为如果倒过来遍历还是处理右值的话,相当于做无用功,上一次遍历的时候已经对右值赋值过了,没有必要再用一次循环。处理左值的代码我是这么写的
//从右往左遍历(左边比右边大的情况)
for(int i = ratings.size() - 1; i > 0; i--){if(ratings[i] < ratings[i - 1])v[i - 1] = max(v[i] + 1, v[i - 1]);
}
第二个细节就是第二次遍历的时候的赋值操作,并不是简单地在旁边的较小值的糖果数上加1就完事了,有可能在第一次遍历的时候已经满足大小关系了,第二遍再处理一遍的话会导致重复处理,糖果一定会多发,所以一定要取赋值过后与之前的值之间的较大值。
这是完整的代码
class Solution {
public:int candy(vector<int>& ratings) {vector<int> v(ratings.size(), 1);//从左往右遍历(右边比左边大的情况)for(int i = 1; i < ratings.size(); i++){if(ratings[i] > ratings[i - 1])v[i] = v[i - 1] + 1;}//从右往左遍历(左边比右边大的情况)for(int i = ratings.size() - 1; i > 0; i--){if(ratings[i] < ratings[i - 1])v[i - 1] = max(v[i] + 1, v[i - 1]); }return accumulate(v.begin(), v.end(), 0);}
};
860.柠檬水找零
这个比较简单,收5块钱不找零,收10块钱只能找5块的零,收20块的优先用10+5找零,其次再用5+5+5找零,按照这个规则去遍历数组,在钞票数够用的情况下一定可以找零,return true,如果出现钞票不够的情况直接return false。
class Solution {
public:map<int, int> money;bool lemonadeChange(vector<int>& bills) {for(int i = 0; i < bills.size(); i++){if(bills[i] == 5)money[5]++;else if(bills[i] == 10){ if(money[5] == 0) //必须要有5元零钱return false;money[5]--;money[10]++;}else{if(money[5] == 0 || (money[10] * 10 + money[5] * 5 < 15)) //找不起钱return false;if(money[10] > 0){money[10]--;money[5]--;}else money[5] -= 3;}}return true;}
};
406.根据身高重建队列
说是说这个题目和分发糖果的思路很像,但是我还是做不出来┭┮﹏┭┮被自己菜哭了。这道题有两个维度,一个是身高h,一个是前面比本人高的人数k,这道题并不能先选择任意一个维度进行排序,因为先按照k排序过后得到的数组依旧没什么逻辑性,很混乱,但是按照身高降序排列的话能得到一些比较好的性质,那就是后面的元素插到前面时,该元素前面的元素的相对位置无需变动,因为从后面插进来的人身高一定会比前面的人矮,并不会影响前面的人的k值,这个性质就非常好。
这道题的原理想清楚以后还没有那么容易写出来,这个题目还比较考验C++基本功,需要对vector<vector>自定义排序规则,首先按身高进行降序排列,身高相同的则k值小的排前面。第二个就是要将元素插入到指定位置,其余元素相对位置不变,vector并没有现成的函数可以调用,所以要自己手搓一个,这里主要还是用swap函数来实现,当某个元素需要插入到前面时,就将该元素与前一个元素交换位置,如此循环,直到该元素被交换到指定位置。
class Solution {
public:static bool compareVectors(const std::vector<int>& a, const std::vector<int>& b) { // 按照身高降序排列,若身高相同则k值小的靠前if(a[0] > b[0]) return true;else if(a[0] < b[0]) return false;else return a[1] < b[1];} vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), compareVectors);for(int i = 0; i < people.size(); i++){int j = i;int target = people[i][1];while(j > target){iter_swap(people.begin() + j, people.begin() + j - 1);j--;}}return people;}
};
好难啊。。今天这个博客是我写的篇幅最大的博客之一了。
相关文章:
代码随想录打卡Day29
今天的题目尊嘟好难…除了第三题没看视频,其他的题目都是看了视频才做出来的。二刷等我。 134. 加油站 感觉这道题和之前的53. 最大子序和有点像,最大子序和是一旦当前总和为负数则立即抛弃当前的总和,从下个位置重新开始计算,而…...
图分类!!!
deepwalk 使用图中节点与节点的共现关系来学习节点的向量表示。那么关键的问题就是如何来描述节点与节点的共现关系,DeepWalk给出的方法是使用随机游走(RandomWalk)的方式在图中进行节点采样,RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问…...
高防IP是如何防御攻击
DDoS攻击作为网络攻击中最常见的一种,一般利用大量的虚假流量向目标服务器发起攻击,进而堵塞网络损耗服务器性能,使服务器呈现崩溃状态,令真正的用户无法正常访问发送请求。以前的大型企业通常都是使用高防服务器来抵抗这类攻击&a…...
Kubernetes 系列 | k8s入门运维
目录 一、K8S集群搭建1.1 部署方式1.2 了解kubeadm1.3 部署流程1.3.1 初始化配置1.3.2 安装容器运行时1.3.3 安装K8S软件包1.3.4 创建集群 二、集群高可用1.1 集群高可用-堆叠1.2 集群高可用-集群外etcd 三、Pod运维3.1 Pod运维3.2 Pod的生命周期3.3 Pod状况3.4 Pod阶段3.5 容器…...
yolov8+deepsort+botsort+bytetrack车辆检测和测速系统
结合YOLOv8、DeepSORT、BoTSORT和ByteTrack等技术,可以实现一个高效的车辆检测和测速系统。这样的系统适用于交通监控、智能交通管理系统(ITS)等领域,能够实时识别并跟踪车辆,并估算其速度。 项目介绍 本项目旨在开发…...
基于准静态自适应环型缓存器(QSARC)的taskBus万兆吞吐实现
文章目录 概要整体架构流程技术名词解释技术细节1. 数据结构2. 自适应计算队列大小3. 生产者拼接缓存4. 高效地通知消费者 小结1. 性能表现情况2. 主要改进和局限3. 源码和发行版 概要 准静态自适应环形缓存器(Quasi-Static Adaptive Ring Cache)是task…...
C++笔记---指针常量和常量指针
巧记方法(方法来自于网络出处忘记了):const读作常量,*读作指针,按顺序读即可。例如: const int * ptr; //const在前*在后读作常量指针 const * int ptr; //const在前*在后读作常量指针 int * const prt; /…...
Python习题 177:设计银行账户类并实现存取款功能
(编码题)Python 实现一个简单的银行账户类 BankAccount,包含初始化方法、存款、取款、获取余额等功能。 参考答案 分析需求如下。 Python 类 BankAccount,用于模拟银行账户的基本功能。该类应包含以下方法: 初始化方法: 接受两个参数:account_holder(账户持有人的姓…...
IPhone 16:它的 “苹果智能 “包括哪些内容?
IPhone 16 的发布让科技界看到了该公司的人工智能产品 “苹果智能”(Apple Intelligence)究竟能做些什么。 苹果公司发布了拥有人工智能硬件升级的最新款 iPhone 16,进一步进军人工智能领域。苹果公司首席执行官蒂姆-库克(Tim Coo…...
【中国国际航空-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
【ArcGIS】栅格计算器原理及案例介绍
ArcGIS:栅格计算器原理及案例介绍 栅格计算器(Raster Calculator)原理介绍案例案例1:计算栅格数据平均值 参考 栅格计算器(Raster Calculator)原理介绍 描述:在类似计算器的界面中,…...
LOOKUP函数和VLOOKUP函数知识讲解与案例演示
〇、需求 在 Excel 文档中,根据查找值从查找域和结果域构成的数组中,找到对应的结果值。 一、知识点讲解 LOOKUP函数(比较常用,推荐)和VLOOKUP函数 两个公式都可以实现上述需求。 1. LOOKUP 函数 1.1 单个查询条件…...
Java技术深度探索:高并发场景下的线程安全与性能优化
Java技术深度探索:高并发场景下的线程安全与性能优化 在当今的软件开发领域,随着互联网应用的日益复杂和用户量的激增,高并发成为了一个不可忽视的技术挑战。Java,作为一门广泛应用于企业级开发的编程语言,其内置的并发支持机制如线程(Thread)、锁(Lock)、并发集合(…...
Vulnhub-RickdiculouslyEasy靶场(9个flag)
flag1 端口9090有一个flag flag2 13337端口 flag3 使用dirb进行扫描网站的80端口,发现一些敏感文件 访问80端口,没有发现有效信息 访问passwords目录 访问FLAG.txt 再返回访问passwords.html文件 查看页面源代码发现一个密码 flag4 之前扫描到了robo…...
Android Studio Menu制作
文章目录 在Activity上新建onCreateOptionsMenu新建menu目录及资源文件新建Menu一级菜单在Activity上加载Menu 在Activity上新建onCreateOptionsMenu Overridepublic boolean onCreateOptionsMenu(Menu menu) {return super.onCreateOptionsMenu(menu);}新建menu目录及资源文件…...
【mybatis】使用模糊查询时报错:Encountered unexpected token: “?“ “?“
报错信息如下: Mapper.xml报错代码: AND HILIST_NAME like %#{hilistName}% 解决方案: 把模糊查询的 sql 语句改为使用 CONCAT 命令拼接, 就不会报错了。 AND HILIST_NAME like CONCAT(%, #{hilistName},%)...
【Linux】文件权限与类型全解:你的文件安全指南
欢迎来到 CILMY23 的博客 🏆本篇主题为:文件权限与类型全解:你的文件安全指南 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux | 算法专题…...
解析DNS查询报文,探索DNS工作原理
目录 1. 用 tcpdump工具监听抓包 2. 用 host 工具获取域名对应的IP地址 3. 分析DNS以太网查询数据帧 3.1 linux下查询DNS服务器IP地址 3.2 DNS以太网查询数据帧 (1)数据链路层 (2)网络层 (3)传输层…...
Unity让摄像机跟随物体的方法(不借助父子关系)
在Unity中,不使用子对象的方式让相机跟随物体移动,我们通过编写脚本来实现。下面放一个从工程中摘出来的的C#脚本示例,用于将相机绑定到一个Target对象上并跟随其移动: using UnityEngine; public class FollowCamera : MonoBeh…...
misc音频隐写
一、MP3隐写 (1)题解:下载附件之后是一个mp3的音频文件;并且题目提示keysyclovergeek;所以直接使用MP3stego对音频文件进行解密;mp3stego工具是音频数据分析与隐写工具 (2)mp3stego工具的使用:…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
