代码随想录打卡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工具的使用:…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
