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

Day49 | 动态规划 :线性DP 判断子序列两个字符串的删除操作

Day49 | 动态规划 :线性DP 判断子序列&&两个字符串的删除操作

动态规划应该如何学习?-CSDN博客

动态规划学习:

1.思考回溯法(深度优先遍历)怎么写

注意要画树形结构图

2.转成记忆化搜索

看哪些地方是重复计算的,怎么用记忆化搜索给顶替掉这些重复计算

3.把记忆化搜索翻译成动态规划

基本就是1:1转换

文章目录

  • Day49 | 动态规划 :线性DP 判断子序列&&两个字符串的删除操作
    • 392.判断子序列
      • 思路分析(子问题):
      • 递归边界
      • 1.回溯
      • 2.记忆化搜索
      • 3.动态规划
    • 583.两个字符串的删除操作
      • 思路分析(子问题):
      • 1.回溯
      • 2.记忆化搜索
      • 3.动态规划

392.判断子序列

392. 判断子序列 - 力扣(LeetCode)

思路分析(子问题):

就是昨天的编辑距离的删除操作Day48 | 动态规划 :线性DP 编辑距离-CSDN博客

dfs(x,y)就是s的前x个字符是不是t的前y个字符的子序列,是返回true,不是返回false

x为s的下标,y为t的下标

还是看选或不选s[x]和t[y]

1.如果s[x]==t[y]

那就选s[x]和t[y]

返回dfs(x-1,y-1),继续递归下面的,即

dfs(x,y)=dfs(x-1,y-1)

也可以理解为当前的s[x]和t[y]对结果没有影响

2.如果s[x]!=t[y]

那就是删除掉t[y]看t剩下的部分包不包含s

dfs(x,y)=dfs(x,y-1)

递归边界

如果s为空串,那一定是t的子序列,返回true

如果t为空串,那s不管怎么样都不会是t的子序列,返回false

1.回溯

class Solution {
public:bool dfs(int i,int j,string &s,string &t){if(i<0)return true;if(j<0)return false;if(s[i]==t[j])return dfs(i-1,j-1,s,t);elsereturn dfs(i,j-1,s,t);}bool isSubsequence(string s, string t) {return dfs(s.size()-1,t.size()-1,s,t);}
};

2.记忆化搜索

就是搞一个哈希表dp,全都初始化为-1,每次返回前给哈希表dp赋值,碰到不是-1的那就是算过的,那就直接返回计算过的结果,不需要再次递归了

class Solution {
public:bool dfs(int i,int j,string &s,string &t,vector<vector<int>> &dp){if(i<0)return true;if(j<0)return false;if(dp[i][j]!=-1)return dp[i][j];if(s[i]==t[j])return dp[i][j]=dfs(i-1,j-1,s,t,dp);elsereturn dp[i][j]=dfs(i,j-1,s,t,dp);}bool isSubsequence(string s, string t) {vector<vector<int>> dp(s.size(),vector<int>(t.size(),-1));return dfs(s.size()-1,t.size()-1,s,t,dp);}
};

3.动态规划

注意我们的i=0和j=0是表示的dfs中i<0和j<0非法的状态,即s为空串或者t为空串,对应的是递归边界

所以dp数组的下标从1开始记录答案

class Solution {
public:bool isSubsequence(string s, string t) {vector<vector<bool>> dp(s.size()+1,vector<bool>(t.size()+1,false));for(int i=0;i<=t.size();i++)dp[0][i]=true;for(int i=0;i<s.size();i++)for(int j=0;j<t.size();j++)if(s[i]==t[j])dp[i+1][j+1]=dp[i][j];else    dp[i+1][j+1]=dp[i+1][j];return dp[s.size()][t.size()];}
};

583.两个字符串的删除操作

583. 两个字符串的删除操作 - 力扣(LeetCode)

思路分析(子问题):

就是昨天的编辑距离的删除操作Day48 | 动态规划 :线性DP 编辑距离-CSDN博客

//相等不用删		
if(s[i]==t[j])return dfs(i-1,j-1,s,t);
//不相等
elsereturn min(dfs(i-1,j,s,t),dfs(i,j-1,s,t))+1;
//               删s的            删t的
//两个里面搞一个最小值最后再把删除这一步的步数1加上搞定

仅仅是去掉了替换操作,剩下的代码都一样的,这里不做过多的解释了

1.回溯

class Solution {
public:int dfs(int i,int j,string& s,string &t){if(i<0)return j+1;if(j<0)return i+1;if(s[i]==t[j])return dfs(i-1,j-1,s,t);elsereturn min(dfs(i-1,j,s,t),dfs(i,j-1,s,t))+1;}int minDistance(string word1, string word2) {return dfs(word1.size()-1,word2.size()-1,word1,word2);        }
};

2.记忆化搜索

就是搞一个哈希表dp,全都初始化为-1,每次返回前给哈希表dp赋值,碰到不是-1的那就是算过的,那就直接返回计算过的结果,不需要再次递归了

class Solution {
public:int dfs(int i,int j,string& s,string &t,vector<vector<int>> &dp){if(i<0)return j+1;if(j<0)return i+1;if(dp[i][j]!=-1)return dp[i][j];if(s[i]==t[j])return dp[i][j]=dfs(i-1,j-1,s,t,dp);elsereturn dp[i][j]=min(dfs(i-1,j,s,t,dp),dfs(i,j-1,s,t,dp))+1;}int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size(),vector<int>(word2.size(),-1));return dfs(word1.size()-1,word2.size()-1,word1,word2,dp);        }
};

3.动态规划

注意我们的i=0和j=0是表示的dfs中i<0和j<0非法的状态,即s为空串或者t为空串,对应的是递归边界

所以dp数组的下标从1开始记录答案

class Solution {
public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()+1,vector<int>(word2.size()+1,0));for(int i=0;i<=word2.size();i++)dp[0][i]=i;for(int i=0;i<=word1.size();i++)dp[i][0]=i;for(int i=0;i<word1.size();i++)for(int j=0;j<word2.size();j++)if(word1[i]==word2[j])dp[i+1][j+1]=dp[i][j];elsedp[i+1][j+1]=min(dp[i+1][j],dp[i][j+1])+1;return dp[word1.size()][word2.size()];        }
};

相关文章:

Day49 | 动态规划 :线性DP 判断子序列两个字符串的删除操作

Day49 | 动态规划 &#xff1a;线性DP 判断子序列&&两个字符串的删除操作 动态规划应该如何学习&#xff1f;-CSDN博客 动态规划学习&#xff1a; 1.思考回溯法&#xff08;深度优先遍历&#xff09;怎么写 注意要画树形结构图 2.转成记忆化搜索 看哪些地方是重复…...

HDR视频技术之三:色度学与颜色空间

HDR 技术的第二个理论基础是色度学。从前面的内容中可以了解到&#xff0c;光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础&#xff0c;但是 HDR 技术不仅仅关注于提升图像与视频的亮度范围&#xff0c;同时也关注于提供更加丰富的色彩。因此&#xff…...

nginx和netcore加载常见的3D模型

背景 数字孪生带火了3D版的Web世界&#xff0c;3D模型格式也是众多&#xff0c;常见的glb适合web传输&#xff0c;fbx&#xff0c;gltf&#xff0c;obj&#xff0c;unity等常用于模型编辑和处理。我们在用netcore或者wasm加载这些3D模型文件时&#xff0c;一般都需要手工增加M…...

ABAP开发学习——标准GUI状态模板的复制

补充一下创建了GUI状态后复制标准状态的方法 首先创建GUI状态 此时按钮全部都是空的 点击顶部的附加-调整模板 选择列表查看器 应用成功&#xff0c;下一步点击激活即可 另外需要注意&#xff0c;功能键中的三个图标的代码并不是习惯性写的”BACK、EXIT、CANCEL",在这个标…...

酷!用豆包MarsCode 写了一个五子棋小游戏

作者&#xff1a;一起重学前端 前言 2017 年&#xff0c;当时大学三本毕业前端工作一年&#xff0c;去深圳找工作面试&#xff0c;在拉勾上海投&#xff0c;接到某公司前端开发团队回复询问邮箱账号&#xff0c;喜滋滋的以为可以有面试了。一看邮箱&#xff0c;抛给我一道面试…...

IntelliJ IDEA 中,自动导包功能

在 IntelliJ IDEA 中&#xff0c;自动导包功能可以极大地提高开发效率&#xff0c;减少手动导入包所带来的繁琐和错误。以下是如何在 IntelliJ IDEA 中设置和使用自动导包功能的详细步骤&#xff1a; 一、设置自动导包 打开 IntelliJ IDEA&#xff1a; 启动 IntelliJ IDEA 并打…...

c#异步编程(async/await)

注&#xff1a;下文摘自ChatGPT&#xff0c;总结与案例都非常完善&#xff0c;可以快速理解并应用 0&#xff1a;使用场景 在winform界面程序中&#xff0c;在ui操作中涉及到一些耗时的等待操作&#xff0c;使用线程自己处理已经显得力不从心&#xff0c;如何能更好的实现&am…...

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库&#xff08;例如boost&#xff09; vcpkg的自动链接功能非常方便&#xff0c;但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例&#xff0c;程序中调用tinyxml2的函数后&#xff0c;若vcpkg中同时存在opencv和…...

cocoscreater3.8.4生成图集并使用

1.安装texturepacker&#xff0c;去官网下载https://www.codeandweb.com/texturepacker 2.将图片拖动进来&#xff0c;即可自动生成精灵表&#xff0c;这里输出选用cocos2d-x&#xff0c;打包用免费版的“基本”就行&#xff0c;高级模式是收费的&#xff0c;然后点击“发布精…...

Ettercap工具使用说明

文章目录 Ettercap 简介Ettercap 的主要功能Ettercap 的安装在 Kali Linux&#xff08;或基于 Debian 的系统&#xff09;上安装&#xff1a;在其他操作系统上&#xff1a; Ettercap 的使用方式1. 基本模式2. MITM 攻击ARP 欺骗DNS 欺骗 3. 嗅探模式 常用插件防御建议 Ettercap…...

Linux 如何创建逻辑卷并使用

一、逻辑卷的介绍 生成环境中逻辑卷使用率很高 逻辑卷的诞生&#xff1a;如果对磁盘直接使用fdisk分区&#xff0c;那么这中分区&#xff0c;我们叫做Linux的标准分区&#xff0c;Linux的标准分区格式化成文件系统之后&#xff0c;挂载使用&#xff0c;那么一旦文件系统的空间…...

laravel-operate

php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear 1、查看artisan所有命令&#xff1b; php artisan list 2、查看命令描述及参数和选项&#xff1b; php artisan&#xff08;n.工匠、技工&#xff09; help migration&…...

探索Python WebSocket新境界:picows库揭秘

文章目录 探索Python WebSocket新境界&#xff1a;picows库揭秘第一部分&#xff1a;背景介绍第二部分&#xff1a;picows库概述第三部分&#xff1a;安装picows库第四部分&#xff1a;简单库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第…...

海康VsionMaster学习笔记(学习工具+思路)

一、前言 VisionMaster算法平台集成机器视觉多种算法组件&#xff0c;适用多种应用场景&#xff0c;可快速组合算法&#xff0c;实现对工件或被测物的查找测量与缺陷检测等。VM算法平台依托海康威视在图像领域多年的技术积淀&#xff0c;自带强大的视觉分析工具库&#xff0c;可…...

Java面试题、八股文——JVM篇最终篇

1.如何选择垃圾收集器&#xff1f; 选择合适的垃圾收集器&#xff08;Garbage Collector, GC&#xff09;对于优化Java应用程序的性能至关重要。不同的应用场景和系统需求可能需要不同类型的垃圾收集器来满足。以下是一些考虑因素以及常见的垃圾收集器选项&#xff0c;帮助您做…...

C++ 11重点总结2

1C11多线程 主要对少用的知识点进行详细描述&#xff0c;用的多的就给示例。照猫画虎 #include<thread> // 默认构造函数 thread() // 初始化构造函数 template<class Fn, class... Args> explicit thread(Fn&& fn, Args&&... args) // 移动构造…...

什么是 C++ 中的函数对象?它有什么特点?

在 C 中&#xff0c;函数对象&#xff08;Function Object&#xff09;是一种可调用对象&#xff0c;它允许像函数一样被调用&#xff0c;但实际上它可能并不是真正的函数。函数对象可以是以下几种类型之一&#xff1a; 普通函数&#xff1a; 一个普通的、定义在命名空间或类…...

Golang 反射

一、Go反射的应用场景 &#xff08;一&#xff09;对象序列化和反序列化 场景描述 在处理网络通信&#xff0c;数据存储等场景中&#xff0c;需要将对象转换为字节流&#xff08;序列化&#xff09;以便传输或存储&#xff0c;在接收端再将字节流转换回对象&#xff08;反序列…...

hhdb数据库介绍(10-7)

OEM管理 为方便更换管理平台的产品Logo以及产品名称信息。引入“OEM管理功能”对外提供可视化更新Logo以及产品名称信息的入口。 功能入口&#xff1a; 具有管理权限的用户登录平台&#xff0c;通过 OEM管理的超链接进入功能页面&#xff0c;超链接路径需要在原访问页面url的…...

RabbitMQ的预取值详解

RabbitMQ的预取值&#xff08;Prefetch Value&#xff09;是一个关键概念&#xff0c;它决定了消费者在从队列中获取消息时&#xff0c;一次性可以获取的消息数量。这一机制对于优化消息分发和消费者的负载均衡至关重要。 什么是RabbitMQ的预取值&#xff1f; 预取值是指消费者…...

mysql 触发器进入历史

一、触发器 MySQL 触发器&#xff08;Triggers&#xff09;是一种数据库对象&#xff0c;它与表关联&#xff0c;能在特定的事件&#xff08;如插入、更新或删除&#xff09;发生时自动执行一些指定的操作。使用触发器可以帮助我们自动维护数据库的完整性、一致性&#xff0c;…...

通过数巅能源大模型降本增效

在能源行业中&#xff0c;数据的有效利用对于企业的决策和运营至关重要。随着业务的发展&#xff0c;企业面临着数据分散、数据分析效率低、报告生成耗时等问题&#xff0c;制约了企业的发展和竞争力的提升。 数巅能源大模型解决方案 数巅科技推出了能源大模型解决方案&#x…...

如何编写出色的技术文档

目录 ​编辑 1. 明确文档目的和受众 目的的重要性 了解受众 2. 收集和组织信息 信息收集的技巧 组织信息 3. 规划文档结构 结构规划的重要性 结构规划的步骤 4. 编写内容 语言和风格 内容的组织 编写技巧 5. 审阅和测试 审阅的重要性 测试的必要性 6. 版本控…...

摄像头原始数据读取——gstreamer(gst_parse_launch)

摄像头原始数据读取——gstreamer(gst_parse_launch) #include <stdio.h> #include <string.h> #include <stdlib.h>#ifdef __cplusplus extern "C" { #endif#include <gst/gst.h>#ifdef __cplusplus }; #endifstatic gboolean bus_msg_tim…...

矩阵/矩阵乘法/特征值/特征向量的讲解

线性代数里有很多的概念&#xff0c;很多概念是有几何意义的&#xff0c;了解了几何意义可能会更好的理解各种概念及其相互之间的关系。 矩阵&#xff1a; 矩阵是一个变换&#xff0c;一个坐标系到另一个坐标系的变换。矩阵里的各个参数&#xff0c;代表了如何进行变换。 矩阵…...

docker-compose搭建xxl-job、mysql

docker-compose搭建xxl-job、mysql 1、搭建docker以及docker-compose2、下载xxl-job需要数据库脚本3、创建文件夹以及docker-compose文件4、坑来了5、正确配置6、验证-运行成功 1、搭建docker以及docker-compose 略 2、下载xxl-job需要数据库脚本 下载地址&#xff1a;https…...

《图像形态学运算全解析:原理、语法及示例展示》

简介&#xff1a; 本文详细介绍了图像形态学中的多种运算&#xff0c;包括腐蚀、膨胀、开运算、闭运算、形态学梯度运算、礼帽运算以及黑帽运算。分别阐述了各运算的原理、语法格式&#xff0c;并通过 Python 代码结合具体示例图片&#xff08;如erode.JPG、dilate.JPG、close.…...

【面试分享】C++ 中结构体(struct)和类(class)的区别

在 C中&#xff0c;结构体&#xff08;struct&#xff09;和类&#xff08;class&#xff09;有一些相似之处&#xff0c;但也存在一些重要的区别&#xff1a; 一、默认访问权限 结构体&#xff1a; 在 C中&#xff0c;结构体的默认成员访问权限是public&#xff08;公有&…...

Rk3588 onnx转rknn,出现 No module named ‘rknn‘

一、操作步骤&#xff1a; rk3588 需要将yolo11 的模型onnx转rknn。 https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolo11 这个是用yolo11训练的模型&#xff0c;有80种类型。 完整下载下来后&#xff0c;在按文档描述下载模型下来&#xff1a; 然后进…...

HarmonyOS:@Provide装饰器和@Consume装饰器:与后代组件双向同步

一、前言 Provide和Consume&#xff0c;应用于与后代组件的双向数据同步&#xff0c;应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递&#xff0c;Provide和Consume摆脱参数传递机制的束缚&#xff0c;实现跨层级传递。 其中Provi…...

在并发情况下,Elasticsearch如果保证读写一致?

大家好&#xff0c;我是锋哥。今天分享关于【在并发情况下&#xff0c;Elasticsearch如果保证读写一致&#xff1f;】面试题。希望对大家有帮助&#xff1b; 在并发情况下&#xff0c;Elasticsearch如果保证读写一致&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java…...

通过 SSH 进行WordPress网站的高级服务器管理

我在管理hostease的服务器时&#xff0c;时常需要通过SSH登录服务器进行修改。而在网站管理中&#xff0c;SSH不仅是一个基础工具&#xff0c;更是高级用户用来精细化管理和优化服务器的重要工具。通过SSH&#xff0c;你可以深入监控服务器的性能、精细管理系统资源&#xff0c…...

关闭AWS账号后,服务是否仍会继续运行?

在使用亚马逊网络服务&#xff08;AWS&#xff09;时&#xff0c;用户有时可能会考虑关闭自己的AWS账户。这可能是因为项目结束、费用过高&#xff0c;或是转向使用其他云服务平台。然而&#xff0c;许多人对关闭账户后的服务状态感到困惑&#xff0c;我们九河云和大家一起探讨…...

PostgreSQL数据库参数调优实践

PostgreSQL&#xff08;简称PG&#xff09;数据库的性能调优是一个复杂但至关重要的过程&#xff0c;特别是在处理大量数据和复杂查询时。通过合理设置和调整数据库参数&#xff0c;可以显著提升数据库的性能和响应速度。本文将从多个方面详细介绍PostgreSQL数据库参数调优的实…...

Leetcode - 144双周赛

目录 一&#xff0c;3360. 移除石头游戏 二&#xff0c;3361. 两个字符串的切换距离 三&#xff0c;3362. 零数组变换 III 四&#xff0c;3363. 最多可收集的水果数目 一&#xff0c;3360. 移除石头游戏 本题直接模拟过程&#xff0c;可以额外使用一个布尔变量标记谁赢&…...

微信小程序全局配置:TabBar与页面配置详解

微信小程序全局配置:TabBar与页面配置详解 引言 随着移动互联网的迅猛发展,微信小程序作为一种新兴的应用形式,因其便捷性和丰富的功能而受到广泛欢迎。在小程序的开发过程中,全局配置是非常重要的一环,尤其是tabBar和页面的配置。本文将深入探讨微信小程序的全局配置,…...

Linux创建免密登陆(错误:Permission denied (publickey,gssapi-keyex,gssapi-with-mic))

报错截图 解决方法 1. mkdir -p ~/.ssh 2. chmod 700 ~/.ssh 3. ssh-keygen&#xff0c;一直回车 4. chmod 600 /root/.ssh/id_rsa 5. 将公钥内容追加到服务器上&#xff0c;cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 6. chmod 600 ~/.ssh/authorized_keys…...

机器学习深掘临床研究中小分子代谢标志物的探索与应用

摘要 随着生命科学的发展&#xff0c;小分子生物标志物在临床研究中的作用日益凸显。机器学习技术为挖掘小分子生物标志物提供了强大工具。本文介绍了小分子生物标志物的定义、分类及在临床医学中的应用&#xff0c;阐述了常用机器学习算法在生物标志物挖掘中的优势&#xff0…...

计算机网络 第4章 网络层

计算机网络 &#xff08;第八版&#xff09;谢希仁 第 4 章 网络层4.2.2 IP地址**无分类编址CIDR**IP地址的特点 4.2.3 IP地址与MAC地址4.2.4 ARP 地址解析协议4.2.5 IP数据报的格式题目2&#xff1a;IP数据报分片与重组题目&#xff1a;计算IP数据报的首部校验和(不正确未改) …...

Android按键点击事件三种实现方法

1. 在xml文件中为 Button 添加android:onclick属性 由于没有onclick这个函数&#xff0c;onclick下面会提示红色波浪线错误&#xff0c;然后单击一下"onclick"按住键盘上AltEnter键,选择在activity中生成函数 public void onclick(View view) {Toast.makeText(this,&…...

微信小程序中会议列表页面的前后端实现

题外话&#xff1a;想通过集成腾讯IM来解决即时聊天的问题&#xff0c;如果含语音视频&#xff0c;腾讯组件一年5万起步&#xff0c;贵了&#xff01;后面我们改为自己实现这个功能&#xff0c;这里只是个总结而已。 图文会诊需求 首先是个图文列表界面 同个界面可以查看具体…...

决策树——基于乳腺癌数据集与cpu数据集实现

决策树——乳腺癌数据实现 4.1 训练决策树模型,并计算测试集的准确率 1. 读入数据 from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix …...

2024年11月24日Github流行趋势

项目名称&#xff1a;FreeCAD 项目维护者&#xff1a;wwmayer, yorikvanhavre, berndhahnebach, chennes, WandererFan等项目介绍&#xff1a;FreeCAD是一个免费且开源的多平台3D参数化建模工具。项目star数&#xff1a;20,875项目fork数&#xff1a;4,117 项目名称&#xff1…...

库的操作.

创建、删除数据库 创建语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name[ ]是可选项&#xff0c;IF NOT EXISTS 是表明如果不存在才能创建数据库 //查看数据库&#xff0c;假设7行 show databases; //创建数据库 --- 本质在Linux创建一个目录 create database databa…...

Go错误与日志处理—推荐实践

错误的分类 在 Go 语言中&#xff0c;错误是通过实现 error 接口的类型表示的&#xff0c;但不同场景下的错误可以按性质和用途进行分类。以下是 Go 语言错误的常见分类&#xff0c;以及每类错误的解释和示例&#xff1a; 标准错误类型 标准库中定义了许多常见的错误类型&…...

文件上传upload-labs-docker通关

&#xff08;图片加载不出&#xff0c;说明被和谐了&#xff09; 项目一&#xff1a; sqlsec/ggctf-upload - Docker Image | Docker Hub 学习过程中,可以对照源码进行白盒分析. 补充&#xff1a;环境搭建在Linux虚拟机上的同时&#xff0c;以另一台Windows虚拟机进行测试最…...

C语言——数组基本知识(一)

目录 一.一维数组的初始化 二.数组的排序 ①冒泡排序&#xff1a; 代码&#xff1a; 没有第二个for循环运行结果如下&#xff1a; 正确的运行结果如下&#xff1a; ②选择排序 代码如下&#xff1a; 运行结果如图&#xff1a; 往期回顾&#xff1a; 一.一维数组的初始…...

vue2日历组件

【效果图】 <template><div style"width: 100%"><!-- <div> --><!-- <div>{{ startDate.getMonth() 1 - startDate.getDate() }}</div><div>{{ endDate.getMonth() 1 - endDate.getDate() }}</div> --&g…...

Unity C# 影响性能的坑点

c用的时间长了怕unity的坑忘了&#xff0c;记录一下。 GetComponent最好使用GetComponent<T>()的形式&#xff0c; 继承自Monobehaviour的函数要避免空的Awake()、Start()、Update()、FixedUpdate().这些空回调会造成性能浪费 GetComponent方法最好避免在Update当中使用…...

Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念 关系型数据库是典型的行存储数据库&#xff0c;存在的问题是&#xff0c;按行存储的数据在物理层面占用的是连续存储空间&#xff0c;不适合海量数据存储。 Redis在生产中使用的最多的是用作数据缓存。 服务器先在缓存中查询数据&#xff0c;查到则返回&#xff0c;…...