【刷题】模拟
模拟算法:题目中已经告诉应该怎么做了,只需要模拟即可,思路比较简单,比较考察代码能力。
一般先在草稿纸上模拟流程,如果直接写代码,容易忽视细节,并且不容器调试!
优化策略:找规律!
Z 形变换
Z 字形变换
- 暴力模拟
- 找规律
// 暴力模拟
class Solution {
public:string convert(string s, int numRows) {vector<vector<char>> v(numRows, vector<char>(s.size()));int j = 0, k = 0; // j 为行,k 为列int count = 0;int i = 1;v[j][k] = s[0];while (i < s.size()){while (j + 1 < numRows){j++;v[j][k] = s[i];if (i < s.size()) i++;else break;}if(j == 0) {k++;v[j][k] = s[i];if (i < s.size()) i++;}while (j > 0){j--, k++;if(k < s.size()) {v[j][k] = s[i];}if (i < s.size()) i++;else break;}}string str;for (int i = 0; i < numRows; i++){for (int j = 0; j < s.size(); j++){if (v[i][j] != 0) str.push_back(v[i][j]);}}return str;}
};
// 找规律
class Solution {
public:string convert(string s, int numRows) {// 模拟类题目的优化思路:找规律if(numRows == 1) return s;int d = 2 * numRows - 2; // 计算公差 第一行和最后一行元素相隔的距离int n = s.size();string ret;// 处理第一行for(int i = 0; i < n; i += d) ret += s[i];// 处理中间行for(int k = 1; k < numRows - 1; k++){// 循环处理每一行for(int i = k, j = d- k; i < n || j < n; i += d, j += d){if(i < n) ret += s[i];if(j < n) ret += s[j];}}// 处理最后一行for(int i = numRows - 1; i < n; i += d) ret += s[i];return ret;}
};
数青蛙
数青蛙
- 暴力模拟
- 哈希模拟
// 暴力模拟
class Solution {
public:int minNumberOfFrogs(string s) {int hash[26] = { 0 };int n = s.size();for(int i = 0; i < n; i++){if(s[i] == 'c'){if(hash['k'-'a'] == 0)//没有青蛙叫结束了hash['c' - 'a']++;else{hash['c' - 'a'] ++;hash['k' - 'a'] --; // 有 叫结束的青蛙}}else if(s[i] == 'r'){if(hash['c' - 'a'] != 0){hash['c' - 'a'] --;hash['r' - 'a'] ++;}else return -1;} else if(s[i] == 'o'){if(hash['r' - 'a'] != 0){hash['r' - 'a'] --;hash['o' - 'a'] ++;}else return -1;} else if(s[i] == 'a'){if(hash['o' - 'a'] != 0){hash['o' - 'a'] --;hash['a' - 'a'] ++;}else return -1;} else if(s[i] == 'k'){if(hash['a' - 'a'] != 0){hash['a' - 'a'] --;hash['k' - 'a'] ++;}else return -1;} }if(hash['k' - 'a'] == 0) return -1;if(hash['c' - 'a'] != 0 || hash['r' - 'a'] != 0 || hash['o' - 'a'] != 0 || hash['a' - 'a'] != 0) return -1;return hash['k' - 'a'];}
};
// 哈希模拟
// hash 中存按 "croak" 顺序的字符对应的字符个数
// unordered_map 中存字符和字符对应于 hash 中的下标
class Solution {
public:int minNumberOfFrogs(string s) {string t = "croak";int n = t.size();vector<int> hash(n);unordered_map<char ,int> index; // first 存字符; second 存这个字符对应的下标for(int i = 0; i < n; i++) index[t[i]] = i;for(int i = 0; i < s.size(); i++){if(s[i] == 'c'){if(hash[n - 1] == 0) hash[index[s[i]]]++;else {hash[n - 1]--;hash[index[s[i]]]++;}}else{int k = index[s[i]]; // k为下标if(hash[k - 1] != 0){hash[k - 1]--;hash[k]++;}else return -1;}}for(int i = 0; i < n - 1; i++){if(hash[i] != 0) return -1;}return hash[n - 1];}
};
外观数列
外观数列
用递归来模拟
class Solution {
public:void _countAndSay(int n, string& str){if(n == 1) {str += "1";return;}_countAndSay(n - 1, str);int count = 0;string s_ret;for(int i = 0; i < str.size(); i++){count = 1;while(i + 1 < str.size() && str[i] == str[i + 1]){count++;i++;}s_ret += ('0' + count);s_ret += str[i];}str = s_ret;}string countAndSay(int n) {string str;_countAndSay(n, str);return str;}
};
替换所有的问号
替换所有的问号
class Solution {
public:string modifyString(string s) {int n = s.size();for(int i = 0; i < n; i++){if(s[i] == '?'){// 替换for(char ch = 'a'; ch <= 'z'; ch++){if((i == 0 || s[i - 1] != ch) && (i == n - 1 || s[i + 1] != ch)) {s[i] = ch;break;} }}}return s;}
};
提莫攻击
提莫攻击
class Solution {
public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int count = 0; // 中毒总秒数int ret = duration;for(int i = 0; i < timeSeries.size(); i++){for(int j = 0; j < duration; j++){if(i + 1 < timeSeries.size() && timeSeries[i] + j != timeSeries[i + 1]){count++;} else break;}ret = duration;}count += duration;return count;}
};
相关文章:
【刷题】模拟
模拟算法:题目中已经告诉应该怎么做了,只需要模拟即可,思路比较简单,比较考察代码能力。 一般先在草稿纸上模拟流程,如果直接写代码,容易忽视细节,并且不容器调试! 优化策略&#…...
【打工日常】使用docker部署在线Photopea用于linux下替代ps
一、Photopea介绍 linux没有ps适配,对于有时候工作来说确实不方便,我找了很久,才找到了一款功能可以跟ps接近的在线软件,使用docker部署就可以了。它是ps的最佳替代品之一,其界面几乎与ps相同,只不过它是在…...
leetcode 热题 100_盛最多水的容器
题解一: 双指针遍历:容量计算公式为min(左高度,右高度)*底部距离,我们可以令底部距离逐步递减(左右两边的指针向中部移动)。此时对于min(左高度,右高度),假设较高的线向中部移动&…...
基本正则表达式
基本正则表达式 正则命令功能^尖角号,用于模式的最左侧,如“^oldbpy",匹配以oldboy单词开头的行$美元符,用于模式的最右侧,如"oldboy$",表示以oldboy单词结尾的行^$组合符&…...
sqlserver保存微信Emoji表情
首先将数据库字段,设置类型为 nvarchar(200)一个emoji表情,占4字节就可以了,web前端展示不用改任何东西,直接提交数据保存;回显也会没有问题,C#代码不用做任何处理; 不哭不闹要睡觉ἱ…...
网络编程 io_uring
io_uring 1、概述 io_uring是Linux(内核版本在5.1以后)在2019年加入到内核中的一种新型的异步I/O模型; io_uring使用共享内存,解决高IOPS场景中的用户态和内核态的切换过程,减少系统调用;用户可以直接向…...
Java中的static
Java中的static 同一个类的静态变量共享同一个内存空间,即静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。从变量在内存中的存储方式来看,如果成员…...
如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问
文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛,包括聊天机…...
lv20 QT进程线程编程
知识点:启动进程 ,线程 ,线程同步互斥 1 启动进程 应用场景:通常在qt中打开另一个程序 process模板 QString program “/bin/ls"; QStringList arguments; arguments << "-l" << “-a";QPro…...
什么是机器人学习?
机器人学习是一种涉及人工智能和机器人技术的领域,旨在使机器人能够从经验中学习和改进其性能。通过模仿人类的学习过程,机器人可以通过不断地接收和分析信息来提高自己的技能和表现。机器人学习可以分为监督学习、无监督学习和强化学习等不同类型&#…...
裸机程序--时间片调度
1.为什么自己写一个时间片调度呢 a. 网上其实有很多成熟的时间片调度例程, 包括我最开始参加工作也是抄的网上的例程(还记得当时领导问我看明白了它的调度原理吗, 作为一个自学刚参加工作的我来说, 看懂别人的意思真的很难, 当时只能含糊其词的说看得差不多) b. 在我看来网上的…...
【web APIs】5、(学习笔记)有案例!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、js组成window对象定时器-延迟函数location对象navigator对象histroy对象 二 、本地存储(今日重点)localStorage(重点&am…...
【刷题1】LeetCode 994. 腐烂的橘子 java题解
tag:图论 广度优先搜索 https://leetcode.cn/problems/rotting-oranges/description/?envTypestudy-plan-v2&envIdtop-100-liked 使用广度优先搜索,搜索步数就是分钟数,等到所有橘子都腐烂后,各个橘子腐烂的最长分钟数就是全部都烂的最小…...
Java的运行机制与Java开发环境的搭建
1.编译和执行 首先通过文本编辑器编写源程序(后缀为.java),再利用编译器编译成字节码文件(后缀为.class),最后利用虚拟机也叫解释器解释执行。 2.JVM、JRE和JDK的区别 简单来说, ①JVM 提供了运行 Java 程…...
【Java】面向对象之多态超级详解!!
文章目录 前言一、多态1.1 多态的概念1.2 多态的实现条件1.3 重写1.3.1方法重写的规则1.3.2重写和重载的区别 1.4 向上转型和向下转型1.4.1向上转型1.4.2向下转型 1.5 多态的优缺点1.5.1 使用多态的好处1.5.2 使用多态的缺陷 结语 前言 为了深入了解JAVA的面向对象的特性&…...
react 路由的基本原理及实现
1. react 路由原理 不同路径渲染不同的组件 有两种实现方式 ● HasRouter 利用hash实现路由切换 ● BrowserRouter 实现h5 API实现路由切换 1. 1 HasRouter 利用hash 实现路由切换 1.2 BrowserRouter 利用h5 Api实现路由的切换 1.2.1 history HTML5规范给我们提供了一个…...
[极客大挑战 2019]LoveSQL1 题目分析与详解
一、题目简介: 二、通关思路: 1、首先查看页面源代码: 我们发现可以使用工具sqlmap来拿到flag,我们先尝试手动注入。 2、 打开靶机,映入眼帘的是登录界面,首先尝试万能密码能否破解。 username: 1 or 11…...
探索RedisJSON:将JSON数据力量带入Redis世界
探索RedisJSON:将JSON数据力量带入Redis世界 当我们谈论数据存储和查询时,Redis和JSON都是无法忽视的重要角色。Redis以其高效的键值存储、快速的读/写速度、以及丰富的数据结构赢得了开发者的喜爱。而JSON,作为一种轻量级的数据交换格式&am…...
【精通Spring】基于注解管理Bean
个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…...
Python爬虫——Urllib库-3
目录 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 获取豆瓣电影前十页的数据 ajax的post请求 总结 ajax的get请求 获取豆瓣电影第一页的数据并保存到本地 首先可以在浏览器找到发送数据的接口 那么我们的url就可以在header中找到了 再加上UA这个header 进行请…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
