<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[huiNB的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/huiNB</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; huiNB]]></copyright><item><title><![CDATA[leetcode 530.二叉搜索树的最小绝对差 、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/139263508</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/139263508</guid><author>huiNB</author><pubDate>Tue, 28 May 2024 12:57:48 +0800</pubDate><description><![CDATA[如果left为空，right不为空，就返回right，说明目标节点是通过right返回的，同样，如果right为空，left不为空，就返回left，说明目标节点是通过left返回的。在中序遍历过程中，当前节点值和前一个节点值不一致时，重新赋值为1同时，还要判断之前的节点值出现的次数是否是跟最大次数一样，是的话，就要添加到结果数组中，或者说，其出现的次数大于最大次数，那要重新记录，即清空数组，把该值重新添加到数组。输入：root = [1,0,48,null,null,12,49]]]></description><category></category></item><item><title><![CDATA[leetcode 654.最大二叉树 、617.合并二叉树 、700.二叉搜索树中的搜索 、98.验证二叉搜索树]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/139261500</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/139261500</guid><author>huiNB</author><pubDate>Tue, 28 May 2024 11:21:48 +0800</pubDate><description><![CDATA[可以以一棵树为基础如root1，当root1的左节点为空，root2的左节点不为空，那直接把root2的左节点z指向root1，当成root1的左节点不就行了。其实思想都是一样的，就是当root1的左节点为空，root2的左节点不为空，那直接把root2的左节点z指向root1，当成root1的左节点不就行了。合并的规则是：如果两个节点重叠，那么将这两个节点的值相加作为合并后节点的新值；输入：root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]]]></description><category></category></item><item><title><![CDATA[leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/139222298</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/139222298</guid><author>huiNB</author><pubDate>Sun, 26 May 2024 23:32:23 +0800</pubDate><description><![CDATA[那我们可以用前序遍历一路遍历下去，遍历到下一层，深度加一，不过要注意的是，在返回去的时候，深度要相应的减一，此时就涉及到回溯了。这道题来说，前序和后序基本都可以，如果是中序的话，某些节点可能要交换两次，因为中序遍历逻辑是左中右，在中进行交换，然后再遍历到右节点，这不是相当于把原来交换的再次交换了吗。从示例中可以看到，左子树的左节点的值要等于右子树的右节点的值，左子树的右节点的值要等于右字数的左节点的值。这道题我们要清楚，要比较的不是左右节点，而是根节点的左右两棵树，所以在遍历的过程中，两棵树要同时遍历。]]></description><category></category></item><item><title><![CDATA[leecode 637 二叉树的层平均值]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/139222240</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/139222240</guid><author>huiNB</author><pubDate>Sun, 26 May 2024 22:27:07 +0800</pubDate><description><![CDATA[二叉树的层序遍历一般来说，我们是利用队列来实现的，先把根节点入队，然后在出队后将其对应的子节点入队，然后往复此种操作。给定一个二叉树的 根节点 root，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。（即逐层地，从左到右访问所有节点）。输入：root = [3,9,20,null,null,15,7]输入：root = [3,9,20,null,null,15,7]输入：root = [3,9,20,null,null,15,7]输出：[[3],[9,20],[15,7]]]]></description><category></category></item><item><title><![CDATA[二叉树递归遍历、迭代遍历、统一迭代]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/139089434</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/139089434</guid><author>huiNB</author><pubDate>Tue, 21 May 2024 12:52:11 +0800</pubDate><description><![CDATA[二叉树的迭代遍历可以借助栈来实现，以前序遍历为例，逻辑是中左右，那进栈顺序为中右左，到时候弹出来的不就是中左右吗。2.确定终止条件： 写完了递归算法, 运行的时候，经常会遇到栈溢出的错误，就是没写终止条件或者终止条件写的不对，操作系统也是用一个栈的结构来保存每一层递归的信息，如果递归没有终止，操作系统的内存栈必然就会溢出。1.首先确定递归函数的参数和返回值： 确定哪些参数是递归的过程中需要处理的，那么就在递归函数里加上这个参数， 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。]]></description><category></category></item><item><title><![CDATA[leetcode 239. 滑动窗口最大值、347.前 K 个高频元素]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/139088605</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/139088605</guid><author>huiNB</author><pubDate>Tue, 21 May 2024 12:29:03 +0800</pubDate><description><![CDATA[优先级队列每次出队的元素是队列中优先级最高的那个元素，而不是队首的元素。给你一个整数数组 nums，有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。单调队列：队列元素之间的关系具有单调性（从队首到队尾单调递增/递减），队首和队尾都可以进行入队出队（即插入删除）操作，本质是由双端队列deque实现。这道题是优先队列的应用。这道题是单调队列的应用，本来试着直接解出来，但是一直有bug，然后看了题解后发现是单调队列的应用。输入：nums = [1,3,-1,-3,5,3,6,7], k = 3。]]></description><category></category></item><item><title><![CDATA[leetcode 20.有效的括号、1047.删除字符串中的所有相邻重复项、150.逆波兰表达式值。]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/139067298</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/139067298</guid><author>huiNB</author><pubDate>Mon, 20 May 2024 16:09:47 +0800</pubDate><description><![CDATA[首先我们要知道，如果匹配的话，那当我们把’('、‘{’、‘['入栈后，当遍历到）、}、]时，从栈取出来的一定是对应的那个。tokens[i] 是一个算符（“+”、“-”、“*” 或 “/”），或是在范围 [-200, 200] 内的一个整数。给定一个只包括 ‘(’，‘)’，‘{’，‘}’，‘[’，‘]’ 的字符串 s ，判断字符串是否有效。输入：tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,“输入：tokens = [“2”,“1”,“+”,“3”,“*”]]]></description><category></category></item><item><title><![CDATA[leetcode 232.用栈实现队列、225. 用队列实现栈]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138998553</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138998553</guid><author>huiNB</author><pubDate>Fri, 17 May 2024 10:57:40 +0800</pubDate><description><![CDATA[要用队列来实现栈，其实不用两个队列，就算用两个第一列，另一个队列相当于是备份的，可以用一个队列实现就行了。要用栈来实现队列的功能，那要用到两个栈，一个作为输入栈，一个作为输出栈。即当元素入队时，直接压入输入栈中，出队时，因为栈是后进先出，所以先把输入栈的数据压入输出栈中，这样再出栈即为队列出队的队头元素，同样，返回队头元素也是这样。而判断是否为空时，则要两个栈都要为空，队列才为空。请你仅使用两个队列实现一个后入先出（LIFO）的栈，并支持普通栈的全部四种操作（push、top、pop 和 empty）。]]></description><category></category></item><item><title><![CDATA[leetcode 28. 找出字符串中第一个匹配项的下标]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138977713</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138977713</guid><author>huiNB</author><pubDate>Thu, 16 May 2024 22:50:57 +0800</pubDate><description><![CDATA[从前往后遍历haystack，如果有出现与needle的第一位相等的话，则记录此时的位置k，然后去判断后面是是否还是相等，如果遍历完needle，则是 haystack 的一部分，否则，再开始下一轮的重新匹配。给你两个字符串 haystack 和 needle ，请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标（下标从 0 开始）。解释：“leeto” 没有在 “leetcode” 中出现，所以返回 -1。解释：“sad” 在下标 0 和 6 处匹配。]]></description><category></category></item><item><title><![CDATA[leetcode 344.反转字符串、541. 反转字符串II、151.翻转字符串里的单词、卡码网：54.替换数字、卡码网：55.右旋转字符串]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138976606</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138976606</guid><author>huiNB</author><pubDate>Thu, 16 May 2024 22:41:08 +0800</pubDate><description><![CDATA[要审题，i是每次走2k步，然后翻转的是前k个字符，那也就是说起码位置确定了，i走完2k步之后的位置确定了，要翻转的范围也就确定了。这道题是多种操作的结合，包括了字符串的去空格，翻转，字符串内部单词的翻转。这里我给出两种解法，但其实是一样的，就是看代码怎么写。给定一个字符串 s，它包含小写字母和数字字符，请编写一个函数，将字符串中的字母字符保持不变，而将每个数字字符替换为number。给定一个字符串 s 和一个正整数 k，请编写一个函数，将字符串中的后面 k 个字符移到字符串的前面，实现字符串的右旋转操作。]]></description><category></category></item><item><title><![CDATA[leetcode 454.四数相加II 、383. 赎金信 、15. 三数之和 、18. 四数之和]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138925052</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138925052</guid><author>huiNB</author><pubDate>Wed, 15 May 2024 22:49:34 +0800</pubDate><description><![CDATA[这道题是哈希表的应用，只不过是给了四个数组，其实我们可以先用一个哈希表记录两个数组之间任意组合的和，并把同个和存在哈希表的value值中，然后去遍历另外两个数组，然后差值是否存在哈希表的key中，若存在，则满足题目的要求的数量加上这个key对应的value值，其实就是leetcode第一题用哈希表的思想差不多。输入：nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输入：nums = [2,2,2,2,2], target = 8。]]></description><category></category></item><item><title><![CDATA[leetcode 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和 。]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138810405</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138810405</guid><author>huiNB</author><pubDate>Mon, 13 May 2024 17:43:52 +0800</pubDate><description><![CDATA[然后这道题还有一个点就是对一个数字的个位数操作，这个数字对10取余，即n % 10,相当于取个位数，然后对n = n / 10,即去掉个位数，再次对10取余，反复上述的操作。可以在纸上推导一下。这道理是求两个数组的交集，那我们直接用哈希表去将一个数组的值作为哈希表的键，然后去遍历另一个数组，如果遍历到的值在哈希表的键中，那不就是相交的值吗，因为可能一个值在数组中多次存在，所以我们可以用set去保存相交的值，最后再转化为数组。输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]]]></description><category></category></item><item><title><![CDATA[leetcode 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点 、面试题 02.07. 链表相交 、142.环形链表II]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138770790</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138770790</guid><author>huiNB</author><pubDate>Sun, 12 May 2024 23:52:52 +0800</pubDate><description><![CDATA[然后cur的下一个节点q指向起始节点cur，这时候两个节点已经交换了，然后前缀节点指向cur节点，因为前面已经交换完，即cur的未知是原来cur的下一个节点的未知，然后起始节点变为下一个起始节点t。这道题依然是快慢指针的应用，跟链表有环是同样的思路，只不过这次是找环的起点，这里我是画图然后找到规律，就是先让快慢指针先走（快指针每次走两步，慢指针每次走一步，然后走到相等的位置，慢指针重新指向头节点，此时快指针和慢指针同时出发，各走一步，当两个指针走到同一位置时，即为环的起点。如果链表无环，则返回 null。]]></description><category></category></item><item><title><![CDATA[leetcode 203.移除链表元素 、 707.设计链表 、206.反转链表]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138663183</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138663183</guid><author>huiNB</author><pubDate>Fri, 10 May 2024 14:46:39 +0800</pubDate><description><![CDATA[对于链表的增删，一般是使用双指针来实现，即利用两个指针，pre，cur，pre是cur指针的前缀结点，两个指针同时遍历链表，当遍历到等于val时，此时cur指针指向的就是值等于val的节点，也是题目要求删除的节点。则可以利用pre指针（因为pre指针的cur指针的前缀节点）指向cur指向的下一个节点，即删除了当前cur指向的节点。给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点。假设链表中的所有节点下标从 0 开始。]]></description><category></category></item><item><title><![CDATA[leetcode ** 977.有序数组的平方 、 209.长度最小的子数组 、59.螺旋矩阵II**]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138633486</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138633486</guid><author>huiNB</author><pubDate>Thu, 09 May 2024 22:58:34 +0800</pubDate><description><![CDATA[注意上面代码是在对sum相加后，右边窗口直接向右移动了以为，在进入收缩窗口的条件循环时，此时right指向的是下一位数字，如[2,3,1,2,4,3]，当窗口数字为[2,3,1,2],此时right指向的是数组的第五位（即小标为4）4，此时right = 4,left = 0,则长度为right - left = 4 - 0 = 4。这就是我们怎么去移动窗口，窗口的移动，有右边窗口的移动，和左边窗口的移动，一般来说，右边窗口的移动就是往窗口添加数据，而左边窗口的移动就是在满足条件的时候，不断收缩窗口。]]></description><category></category></item><item><title><![CDATA[leetcode 704. 二分查找、 27. 移除元素。]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/138579067</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/138579067</guid><author>huiNB</author><pubDate>Wed, 08 May 2024 17:10:24 +0800</pubDate><description><![CDATA[一般来说，有两种写法，分别是[left,right]左闭右闭的原则，这时右边界的可以取到的，所以终止判断条件为lefe <= right。初始化i和j指针为0，i指针记录当前指向非val值的位置，j指针遍历数组，当j指针的值nums[j]不等于val，则将num[j]赋值给nums[i] 并且i++,j++，而nums[j]等于val，则跳过，即j++，这样，当便利完这个nums数组后，i指针所走过的路程即为数组中非val的长度。双指针分别开始的位置，和判断的条件以及长度的计算。]]></description><category></category></item><item><title><![CDATA[服务器部署diffusion大模型并生成图片]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/133950920</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/133950920</guid><author>huiNB</author><pubDate>Fri, 20 Oct 2023 18:07:38 +0800</pubDate><description><![CDATA[通过GitHubhttps://github.com/huggingface/diffusers下载源码，上传服务器，打开终端，激活相关anaconda环境或者新建一个虚拟环境,进入diffusers根目录，终端输入。可以选择在图片生成过程中在线下载大模型，不过一般需要设置令牌，我选择的是下载对应的大模型部署到服务器，然后本地调用。如果不想翻墙或者设置hugging face网站的token的话，可以选择本地安装相关库和依赖。本次我们以生成赛博猫咪为主题的图片，以下的正面词和负面词。正面词prompt1。]]></description><category></category></item><item><title><![CDATA[深度学习入门之cuda环境配置（3步解决）]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/128628634</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/128628634</guid><author>huiNB</author><pubDate>Tue, 10 Jan 2023 13:43:49 +0800</pubDate><description><![CDATA[3步解决深度学习入门之环境配置，减少烦恼！]]></description><category></category></item><item><title><![CDATA[SSM整合开发demo]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/116082291</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/116082291</guid><author>huiNB</author><pubDate>Sat, 24 Apr 2021 09:52:09 +0800</pubDate><description><![CDATA[SSM整合开发demo
一、前期准备
1.导入相关jar包
2.创建source folder源文件config，并创建db.properties、spring配置文件applicationContext.xml、以及mybatis配置文件mybatis-config.xml、springmvc的配置文件springmvc-config.xml
# db.properties文件配置
jdbc.driver=com.mysql.cj.jdbc.Driver
#jdbc.driver=com.microsof]]></description><category></category></item><item><title><![CDATA[SpringMvc与json交互以及restful风格]]></title><link>https://blog.youkuaiyun.com/huiNB/article/details/116078079</link><guid>https://blog.youkuaiyun.com/huiNB/article/details/116078079</guid><author>huiNB</author><pubDate>Sat, 24 Apr 2021 00:36:02 +0800</pubDate><description><![CDATA[SpringMvc与json交互以及restful风格
1.导入jar包
2.在wen.xml中配置前端控制器等信息配置
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	      xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	      xsi:schemaLocation="http://]]></description><category></category></item></channel></rss>