自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 代码随想录算法训练营第十八天|235. 二叉搜索树的最近公共祖先| 701.二叉搜索树中的插入操作 |450.删除二叉搜索树中的节点

2. 递归的返回值是删除节点后的根节点,删除二叉搜索树中的节点分几种情况,第一种是待删除的节点为叶子节点,这种直接将null返回到上层递归进行处理即可,如果删除节点不是叶子节点且左右子树中一个为空一个不为空,则返回不为空的那一个(作为删除待删除节点后到二叉搜索树的根节点)到上一层递归中进行处理。4. 单层递归逻辑中,当p,q的值都大于或都小于当前遍历节点的值时,依次递归右子树或左子树后接收返回值需要判断是否为null再返回,递归下一层时再次注意不要漏写参数。2. 插入是在二叉搜索树的叶子节点进行插入操作。

2024-07-09 21:12:06 860

原创 代码随想录算法训练营第十七天|530.二叉搜索树的最小绝对差 | 501.二叉搜索树中的众数 |236. 二叉树的最近公共祖先

2. 本题用了回溯的思想,首先需要明确是从下往上找,所以用后续遍历,在左右子树上如果找到了这两个子节点中的其中一个都可以返回到上一级递归中,上一级递归中判断左右子树是否分别有这两个结点,如果有,那说明这一级递归中的结点就是最近的公共祖先,如果只有左子树有其中一个给定子节点,右子树没有给定的另一个子节点,说明当前递归层中的结点不是公共祖先,那么则返回右的这个子节点,交由上一级递归中的结点去判断,反之如果右子树有左子树没有也是同样的逻辑,如果左右子树都没有,那么就返回null。用了一天的零散时间。

2024-07-07 16:02:11 492

原创 代码随想录算法训练营第十六天|654.最大二叉树|617.合并二叉树|700. 二叉搜索树中的搜索|98.验证二叉搜索树

3. 同时操作两棵树t1,t2, 可以直接用t1或t2根节点返回,递归的终止条件是如果t1为null,则返回t2, 如果t2为null则返回t1, 比如同时遍历t1和t2时,两颗树都有值直接进行相加操作,其中一个为null则返回另一个节点,依次递归处理左子树和右子树。通过设置一个变量记录前一个变量节点的数值,然后在每次遍历时通过比较前序遍历的中节点的值和记录的变量的大小关系,如果当前节点的值大于变量记录的值,则可能是二叉搜索树,否则不是二叉搜索书。状态:基于双指针的还没有做。4. 用了两天的零散时间。

2024-07-05 00:12:27 273

原创 代码随想录算法训练营第十五天| 513.找树左下角的值 | 112. 路径总和 | 106.从中序与后序遍历序列构造二叉树

1. 层序遍历可以做,不知道用递归咋做。2.认真读题,首先是必须同时满足深度最大和左边两个条件,通过一个全局变量maxDepth保存最大深度,result保存最大深度对应的节点值,这个值必须是左节点,本题没有对中节点的处理逻辑,前中后序遍历都可以,只需满足左节点比右节点先遍历,递归结束后,返回result。3. javascript不能直接在函数外层用let定义变量(maxDepth, result),递归过程中这些值不能更新,可以通过用一个函数f在内部嵌套递归函数,函数f中定义的变量递归函数可以访问到和更

2024-07-01 21:15:18 450

原创 深度学习评价指标:Precision, Recall, F1-score, mIOU, 和 mDice

精确率(Precision):衡量模型预测的正类样本中实际为正类的比例。召回率(Recall):衡量模型对实际正类样本的识别能力。F1-score:精确率和召回率的调和平均数。平均交并比(mIOU):衡量模型在语义分割任务中的整体性能。平均Dice系数(mDice):衡量模型在分割任务中的效果,尤其对小目标更加敏感。通过理解和应用这些评价指标,可以更全面地评估模型的性能,从而更好地改进模型。如果有任何问题或需要进一步的解释,欢迎在评论区留言。

2024-06-30 18:54:20 1238

原创 代码随想录算法训练营第十四天| 110.平衡二叉树 | 257. 二叉树的所有路径 | 404.左叶子之和 | 222.完全二叉树的节点个数

2. 首先是叶子节点,然后是左叶子节点,所以无法从当前节点进行判断是否是左叶子节点,只能从节点的父节点进行判断,如果当前节点的左孩子不为空,且左孩子的左孩子、右孩子为空,则找到了一个左叶子,右子树可能也有左叶子节点,也要递归,最后将左右的叶子节点相加返回。3.首先是叶子节点,然后是左叶子节点,所以无法从当前节点进行判断是否是左叶子节点,只能从节点的父节点进行判断,如果当前节点的左孩子不为空,且左孩子的左孩子、右孩子为空,则找到了一个左叶子,右子树可能也有左叶子节点,也要递归,最后将左右的叶子节点相加返回。

2024-06-25 23:01:56 382

原创 代码随想录算法训练营第十三天| 226.翻转二叉树|101. 对称二叉树|104.二叉树的最大深度|111.二叉树的最小深度

递归结束条件为当前遍历节点为空。2. 根节点的最大高度就是二叉树的最大深度,二叉树要求高度,通过后序遍历(即左右中)往上计算,叶子节点的高度为1,对于左右中的遍历顺序来说,中节点的最大深度高度为左右子节点高度中的最大值+1,递归结束条件为遍历节点为空,此时高度为0。3. 根节点的最大高度就是二叉树的最大深度,二叉树要求高度,通过后序遍历(即左右中)往上计算,叶子节点的高度为1,对于左右中的遍历顺序来说,中节点的最大深度高度为左右子节点高度中的最大值+1,递归结束条件为遍历节点为空,此时高度为0。

2024-06-21 11:49:53 766

原创 代码随想录算法训练营第十二天

3.在如何获得二叉树最小深度那里想了一下,遍历每一层时将节点保存进一个数组中,然后将层节点数组作为二维数组的一个元素,循环遍历这个二维数组中的每一个元素,如果该元素的左右子节点均为空,则这个元素所在的最外层索引下标+1即为二叉树的最小深度,不知道还有没有更好的方法。4. 遍历每一层时将节点保存进一个数组中,然后将层节点数组作为二维数组的一个元素,循环遍历这个二维数组中的每一个元素,如果该元素的左右子节点均为空,则这个元素所在的最外层索引下标+1即为二叉树的最小深度;1. 二叉树层序遍历为基础改的题。

2024-06-18 17:35:46 634

原创 JavaScript 数组操作和数学计算

以上内容涵盖了在 JavaScript 中对数组进行操作和计算的一些基本知识点。

2024-06-18 14:05:21 259

原创 代码随想录算法训练营第十一天|150. 逆波兰表达式求值

3.注意两个数在和操作符的相对位置,弹出的第一个数应该在操作符的右边,弹出的第二个数应该在操作符的左边,循环遍历逆波兰表达式判断是否位操作符时tokens[i]没有写[i]导致程序用例不能完全通过。2. 遇到数就入栈,遇到操作符就弹出两个操作数,用操作符进行计算,然后将结果入栈,直到遍历完后缀表达式,栈中最后一个元素就是逆波兰表达式计算结果。1. 知道会用到栈,要用到入栈和弹出操作。4. 用了一个小时左右。

2024-06-17 23:45:01 166

原创 代码随想录算法训练营第十天| 232.用栈实现队列|225. 用队列实现栈|20. 有效的括号|1047. 删除字符串中的所有相邻重复项

232.用栈实现队列文档讲解:代码随想录视频讲解:栈的基本操作! | LeetCode:232.用栈实现队列_哔哩哔哩_bilibili知道要用两个栈实现,具体咋做忘了。 队列的特性是先进先出,栈是先进后出,入队操作直接入栈就行,实现出队操作,入栈的第一个元素在栈最下面出来需要借助另一个栈b,先将所有元素入栈b,这样出栈的时候就是入队的第一个元素了,javascript中的栈竟然是直接用数组代替的,直接就可以进行pop操作和push操作。实现了pop函数在实现peek操作的时候可以直接调用

2024-06-16 16:51:22 348

原创 栈与队列理论基础

queue和deque都是STL中的组件,但它们有不同的角色。queue是一个容器适配器,提供队列的接口;而deque是一个容器,提供了在两端高效插入和删除的能力。queue利用deque的这些特性来实现队列的FIFO特性。deque的底层实现是通过一系列分散的缓冲区和指针数组来模拟一个逻辑上的连续内存块。

2024-06-16 10:10:59 313

原创 代码随想录算法训练营第九天| 151.翻转字符串里的单词|卡码网:55.右旋转字符串

3.坚持循环不变量原则,while循环中尽量将循环变量自增操作放置在最后,这样可以让循环变量自增后有一次判断,带入测试用例推导花了一些时间。主要是涉及到对末尾空格的处理,可能有多个空格或一个空格,这个空格需要删除。3.javascript如何处理输入操作,输入处理的代码是网上找的,还没有掌握, 在concat那里少写了一个reverse函数导致结果顺序不对。2. 先反转整个字符串,然后对单词进行反转,需要注意空格的处理。1. 感觉需要用到反转字符串操作,但空格不知道如何处理。1. 想用双指针,发现用不了。

2024-06-15 12:34:59 213

原创 代码随想录算法训练营第八天| 344. 反转字符串|541. 反转字符串 II

个,则将剩余字符全部反转),这两句话前面遍历遇到,题目中放在了后面,这个算法其实还是在考reverse函数的实现,(如果剩余字符小于。个,则将剩余字符全部反转),这两句话前面遍历遇到,题目中放在了后面,这个算法其实还是在考reverse函数的实现,(如果剩余字符小于。个字符,其余字符保持原样)前半段字符串反转,这句话是遍历到后面才会遇到的,题目中放在了前面,(如果剩余字符少于。个字符,其余字符保持原样)前半段字符串反转,这句话是遍历到后面才会遇到的,题目中放在了前面,(如果剩余字符少于。

2024-06-13 21:43:55 384

原创 前端开发中的热更新原理

热更新(Hot Module Replacement,HMR)是一种在前端开发中极为重要的技术。它允许开发者在不重新加载整个页面的情况下,实时更新应用程序中的某些模块。简单来说,热更新能让你在开发过程中即时看到代码修改的效果,大大提高了开发效率。为什么需要热更新?节省时间:减少全量刷新时间,避免浪费在重载页面和重新初始化状态上的时间。提高开发体验:实时反馈修改效果,避免因频繁刷新页面而中断开发流程。保持应用状态:可以在不丢失当前应用状态的情况下进行修改和调试,尤其是在开发复杂应用时,这点尤为重要。

2024-06-13 09:50:34 965

原创 使用 JavaScript 去除数组中 0 到 100 之间的重复数字

假设我们有一个包含 0 到 100 范围内数字的数组,其中有很多重复的数字。我们的目标是去除这些重复数字,最终得到一个包含唯一数字的数组。

2024-06-13 09:32:42 259

原创 http状态码有哪些?

HTTP 状态码是服务器在收到请求后,向客户端(通常是浏览器)返回的状态信息。它们用于表示请求是否成功,是否需要进一步的处理,或者是否发生了错误。HTTP 状态码是理解和排查网络问题的关键。掌握这些状态码不仅可以帮助您解决常见问题,还能提高您在网络技术方面的专业水平。1. 只能想到一些常见的状态码,不能归纳起来。2.1xx(信息性状态码)2xx(成功状态码)3xx(重定向状态码)4xx(客户端错误状态码)5xx(服务器错误状态码)...3. /4.

2024-06-13 09:18:10 1020

原创 canvas的使用方法

通过以上内容,你应该掌握了<canvas>元素的基本使用方法,包括如何绘制基本图形、路径、文本和图像,以及如何进行变换和实现动画。1.没仔细了解过,只知道是绘图用的。2.要在<canvas>上绘图,你需要获取其绘图上下文,最常用的是2D上下文。3. 绘制基本图形。

2024-06-13 09:06:50 289

原创 position有哪些属性?

position属性用于指定一个元素在文档中的定位方式。staticrelativeabsolutefixed和sticky。static:默认值,一般不需要特别指定,除非需要覆盖其他指定的position值。relative:在需要对元素进行轻微调整且保持其在文档流中的位置时使用。absolute:在需要将元素精确定位并从文档流中移除时使用,如弹出框、悬浮菜单等。fixed:在需要元素固定在视口特定位置时使用,如固定导航栏、侧边栏等。sticky。

2024-06-13 08:45:25 585

原创 代码随想录算法训练营第七天| 454.四数相加II |383. 赎金信 |15. 三数之和 |18. 四数之和

4.用了一个小时左右,快速排序代码不熟悉,最外层循环的边界条件,当left==right后left和right要移动(left左移,right右移),不然会一直循环下去。2. 先两个循环将和放到map中,再两个循环求和查询map,计算总数求和,将一个4层循环复杂度降低了。3.快速排序代码不熟悉,最外层循环的边界条件,当left==right后left和right要移动(left左移,right右移),不然会一直循环下去。2. 在双指针上增加一层循环,然后修改对应边界条件,添加去重逻辑,剪枝逻辑。

2024-06-12 21:58:36 344

原创 代码随想录算法训练营第六天| 242.有效的字母异位词 | 349. 两个数组的交集 | 202. 快乐数 |1. 两数之和

3. 不知道如何用javascript创建set类型,没有理解这个题用set的原因,利用了hash法在查找元素方面的优点,这里由于元素长度不固定,用数组就不太适合,利用set这个数据结构(底层实现是红黑树,可以用于这种查找元素范围不固定的情况),将第一个数组转为set1,这样就自动完成了去重操作,然后遍历第二个数组,对每一个元素,在set1中执行查询操作,找到了就添加到结果set2中,利用set2完成去重操作,最后将set2转为数组返回。4,用了一个小时左右,利用set完成去重操作和提高查找效率。

2024-06-11 19:23:59 939

原创 webpack和vite区别

Webpack 是一个模块打包工具,它会递归地构建依赖关系图,并将所有模块打包成一个或多个bundle(包)。Vite 是一个新兴的前端构建工具,主要针对现代前端开发的需求而设计,尤其是针对开发时的热更新速度优化。Webpack适合需要复杂配置和优化的大型项目,特别是那些需要处理多种资源类型和复杂依赖的项目。Vite则更加注重开发体验和速度,适合现代前端框架的小型到中型项目,尤其是需要快速反馈和高效开发的场景。1. 不懂理论。

2024-06-11 13:54:57 975

原创 js基本数据类型

Number类型用于表示数字,包括整数和浮点数。JavaScript中的Number类型是双精度64位二进制格式的IEEE 754值。Infinity:正无穷大Infinity:负无穷大NaN:Not a Number,表示不是一个有效的数字JavaScript的基本数据类型提供了多种方式来表示和操作数据。理解这些基本数据类型对于编写高效、可靠的JavaScript代码至关重要。如果大家有任何问题或者需要进一步的解释,请随时提问!1. boolean, int,string等常见的类型。

2024-06-11 13:42:38 347

原创 promise出现的原因和promise方法

Promise提供了一种更为优雅和简洁的方式来处理JavaScript中的异步操作,解决了回调函数嵌套和错误处理复杂的问题。理解和掌握Promise对现代JavaScript编程至关重要。1. 只知道用于执行异步操作。2.回调地狱(Callback Hell): 当多个异步操作需要按顺序执行时,回调函数会嵌套得非常深,导致代码难以阅读和维护。错误处理复杂: 每个回调函数都需要单独处理错误,这使得代码更为冗长且不易统一管理。可以通过来创建一个Promise对象。resolve和reject。

2024-06-11 13:15:44 900

原创 什么是前端工程化?

前端工程化是指在前端开发中引入一系列标准化和自动化的工具和流程,以提高开发效率、代码质量和项目的可维护性。它包括代码组织、开发工具、构建和打包、版本控制、测试等多个方面。前端工程化不仅仅是使用某些工具或技术,它是一种系统化的开发方法,旨在提升团队协作效率和项目的长期可维护性。掌握前端工程化的理念和实践,不仅能让你在面试中脱颖而出,还能为你未来的职业发展打下坚实的基础。1. 觉得很高大上2.模块化开发,组件化开发,版本控制,构建工具,包管理,代码质量,自动化测试,持续集成/持续部署(CI/CD)。

2024-06-11 13:00:19 1039

原创 讲解一下vue MVVM

MVVM全称是Model-View-ViewModel,是一种软件架构模式,用于分离前端开发中的关注点。Model(模型):数据和业务逻辑。View(视图):用户界面展示。ViewModel(视图模型):连接Model和View的桥梁,负责处理界面的交互逻辑。Vue.js中的MVVM架构通过数据绑定和响应式系统,实现了Model、View和ViewModel的解耦。通过合理地使用MVVM,可以使代码更加清晰、易于维护,并提高开发效率。1. 没听过。

2024-06-11 12:46:34 492

原创 讲一下minxin?

在Vue.js中,mixin是一种分发可复用功能的灵活方式。它允许我们将一组功能分装到一个独立的对象中,然后在多个Vue组件中复用这些功能。mixin中的选项将会被“混入”到使用它的组件中,如果有相同的选项,组件本身的选项会覆盖mixin中的选项。首先,我们需要定义一个mixin对象。这个对象和组件中的选项对象类似,可以包含生命周期钩子、方法、计算属性等。// 定义一个mixindata() {return {},},methods: {greet() {mixin。

2024-06-11 12:37:50 653

原创 讲一下v-model的底层实现原理?

在Vue.js中,v-model是一个用于实现双向数据绑定的指令。它通常用于表单控件上,以便能够在视图和数据模型之间自动同步数据。具体来说,当用户在输入框中输入内容时,数据模型会自动更新;当数据模型发生变化时,视图中的输入框也会自动反映出最新的值。v-model的底层实现主要依赖于Vue的响应式系统,通过监听用户的输入事件和使用getter、setter方法来实现双向数据绑定。了解这些细节可以帮助你在面试中更好地回答关于v-model的问题,并展示你对Vue.js框架的深入理解。

2024-06-11 12:29:37 488

原创 如何用css实现两列布局?

2.通过给两列都设置float:left属性和宽度就可以实现两列布局,还要设置伪元素清除浮动;通过给容器设置flex布局,然后每一列设置flex:1,就可以实现两列等宽;实现两列布局有多种方法,这里我会介绍几种常见的技术,包括浮动、Flexbox和Grid布局。无论使用哪种布局方式,都要考虑响应式设计,以确保布局在各种设备上都能良好展示。Grid布局是CSS中最强大的布局系统之一,尤其适合复杂的网格布局。就可以实现等宽两列布局,这种是只在容器设置即可。4. 多总结即可,容易忘。

2024-06-11 12:15:54 1481

原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点 |19.删除链表的倒数第N个节点 | 面试题 02.07. 链表相交 | 142.环形链表II

4.一起移动快慢指针循环的边界条件时fast指针是否为空,而不是fast.next,可以想一想fast指针应该是在最后一个节点的位置,此时fast指针的下一个节点为null,不能进入循环执行移动操作,正好满足fast指针在最后一个节点位置。2.用双指针正好表示了倒数多少个这个概念,先让快指针移动n+1个位置(不是移动n位是因为用了虚拟头节点,然后需要在待删除结点的前一个节点才能执行操作),然后一起移动快慢指针,当快指针到达链表末尾的位置,慢指针在的位置正好是待删除的元素的前一个节点位置,执行删除操作即可。

2024-06-08 18:57:27 509

原创 代码随想录算法训练营第三天|203.移除链表元素 707.设计链表 206.反转链表

然后就是读题,这个题是设计链表,题目已经明确规定了链表的定义,只需要严格按照这个题目的要求进行实现,比如哪些index是合法的,在index合法和index不超过size那里需要注意,不超过size是可以取到size的。3.当遇到要删除的元素时,prev指向待删除元素的下一个节点后,这个时候prev是否需要移动要看cur移动后对应的节点是否还是待删除的元素,如果是prev就不需要移动,因为还是待删除节点的前一个节点,如果不是prev就需要移动一位。dummyhead的设置感觉会让代码简洁的多。

2024-06-07 13:48:38 422

原创 代码随想录算法训练营第二天| 977. 有序数组的平方、59.螺旋矩阵II。

如果是奇数,最后一步还需要将中心位置赋值。2.非递减这个条件利用的好,较大的数位于数组两端,这就为用双指针解法创造了条件,这个题目没有要求数组原地操作,所以定义left,right指针指向原数组,k指针指向函数返回的新数组,依次比较left,right指向元素平方和的大小,较大的值赋值给k指针指向的位置,较大的指对应的指针移动(向右或向左),k指针后移,知道left>right结束。3. 第一次用暴力解法做,在排序哪里用了冒泡排序,但内层循环本来是遍历的j, 结果用了外层循环的i,导致用例报错。

2024-06-06 13:47:03 456

原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。

然后是双指针解法,理解双指针在这个题中的定义非常重要,快指针是遍历旧数组的指针,慢指针是新数组的指针,只需要快指针循环一次,就可以完成暴力解法两层的循环,开始时快慢指针在同一个位置,如果fast指针所指元素是要删除的元素,fast指针继续移动,slow指针不懂,移动后如果fast指针所指元素不是要删除的元素,则对slow指针所指的位置赋值为fast指针所指的值,slow指针移动, fast指针继续移动,直到遍历到末尾结束,slow指针对应新数组长度。

2024-06-05 12:34:50 382

原创 转换张量形状:`nlc_to_nchw` 函数详解

Args:Returns:"""通过函数,我们可以轻松地将形状为[N, L, C]的张量转换为的张量。这在处理图像数据和构建神经网络时非常有用,因为不同的层和操作可能要求特定的张量形状。理解和掌握这些基本的张量操作是深度学习实践中的重要技能。

2024-06-02 13:21:38 312

原创 深度学习和计算机视觉中的backbone

在深度学习和计算机视觉中,“backbone” 是指深度神经网络的主要部分,通常用于特征提取。骨干网络通过卷积操作提取图像中的低级和高级特征,为后续的特定任务(如分类、检测、分割等)提供丰富的信息。这些骨干网络一般是预训练的,即在大型数据集(如ImageNet)上进行训练,以便在各种下游任务中实现良好的性能。

2024-06-01 15:14:39 700

原创 javascript中ListNode

定义ListNode class后,记得创建节点时需要new ListNode(),不要和python混淆了。

2024-05-14 18:44:31 151

原创 遍历JavaScript对象(字典)

遍历JavaScript对象(字典)是编程中常见的需求。for...in循环提供了最直接的方式,但在某些情况下可能需要额外的检查。与forEach结合使用提供了另一种遍历方式,特别是在您使用现代JavaScript版本时。根据您的具体需求和偏好,可以选择最适合您的遍历方法。

2024-05-01 19:57:17 724

原创 教程:使用JavaScript求绝对值

你可以在浏览器的控制台中测试JavaScript代码,也可以在任何文本编辑器中编写代码,并在浏览器中打开HTML文件来运行。对象提供了许多其他数学相关的函数和属性,可以用于更复杂的计算。函数来求一个数的绝对值。记住,实践是学习的关键,所以尝试编写一些代码来巩固你的理解。绝对值指的是一个数不考虑符号的大小,例如,-5和5的绝对值都是5。在实际编程中,你可能会在更复杂的逻辑中使用绝对值函数。尝试编写一些代码,计算不同数值的绝对值,并确保你理解了。函数,你只需将需要求绝对值的数值作为参数传递给它。

2024-05-01 16:24:21 1142

原创 OJ在线编程常见输入输出(牛客javascript)

【代码】OJ在线编程常见输入输出(牛客javascript)

2024-04-29 11:40:44 383 1

原创 leetcode刷题总结

2. 阅读题干时,通过采取一定极端化思维分析隐藏考点。1. 分析题目时,先抛开代码理清逻辑。

2024-04-26 15:51:13 236

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除