<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[XiaoChe21的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/XiaoChe21</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; XiaoChe21]]></copyright><item><title><![CDATA[牛客刷题日记【判断是否为回文字符串|反转字符串】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/149424068</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/149424068</guid><author>XiaoChe21</author><pubDate>Thu, 17 Jul 2025 16:05:25 +0800</pubDate><description><![CDATA[给定一个长度为 n 的字符串，请编写一个函数判断该字符串是否回文。如果是回文请返回true，否则返回false。写出一个程序，接受一个字符串，然后输出该字符串反转后的字符串。（字符串长度不超过1000）用两个指针，一个从前向后一个从后向前，如果有不同的字符则返回false。按理说是应该用双指针进行空间复杂度o（1）交换的，不过都很简单了。字符串回文指该字符串正序与其逆序逐字符一致。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【字符串的排列|矩阵最长递增路径|括号生成】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/149406229</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/149406229</guid><author>XiaoChe21</author><pubDate>Wed, 16 Jul 2025 19:49:14 +0800</pubDate><description><![CDATA[你需要在矩阵中找到一条最长路径，使这条路径上的元素是递增的。并输出这条最长路径的长度。首先明确递归终止条件，当字符串长度为n的2倍时停止，如果此时左右括号的数量形同，则进入最终字符串数组中。\1. 对于每个单元格，你可以往上，下，左，右四个方向移动。输入一个长度为 n 字符串，打印出该字符串中字符的所有排列，你可以以任意顺序返回这个字符串数组。数组矩阵的本质上有向图，从数字较小的结点到较大的结点为有向箭头。给出n对括号，请编写一个函数来生成所有的由n对括号组成的合法组合。\2. 你不能走重复的单元格。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【没有重复项数字的全排列|有重复项数字的全排列|岛屿数量】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/149359609</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/149359609</guid><author>XiaoChe21</author><pubDate>Tue, 15 Jul 2025 16:50:36 +0800</pubDate><description><![CDATA[给一个01矩阵，1代表是陆地，0代表海洋， 如果两个1相邻，那么这两个1属于同一个岛。和上一题的思路基本相同，唯一不同点是上一题仅对位置进行了限制，即不能出现同一位置的排列。这是一道基础的图论搜索题目，通过dfs将查询到新的陆地周围走过，让其不可再访问。给出一组可能包含重复项的数字，返回该组数字的所有排列。岛屿: 相邻陆地可以组成一个岛屿（相邻:上下左右） 判断岛屿个数。首先，这道题目的时间复杂度要求和n的取值范围是可以打暴力的。) ，时间复杂度 O(n!要求：空间复杂度 O(n!)，时间复杂度 O(n!]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【数组中出现次数超过一半的数字|数组中只出现一次的两个数字|缺失的第一个正整数】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/149325079</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/149325079</guid><author>XiaoChe21</author><pubDate>Mon, 14 Jul 2025 10:36:25 +0800</pubDate><description><![CDATA[因为a ^ b ^ c ^ b ^ c = a ，所以我们试着将整个数组拆分为两段，即满足a ^ b ^ c ^ b ^ c = a， e ^ b ^ c ^ b ^ c = e，这样就得到了两个不同的元素。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。给一个长度为 n 的数组，数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。这次给的数组大小是1000000，用空间换时间会炸内存，所以用其他两种解法。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【表达式求值|数据流中的中位数】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/149297612</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/149297612</guid><author>XiaoChe21</author><pubDate>Sat, 12 Jul 2025 17:51:17 +0800</pubDate><description><![CDATA[如何得到一个数据流中的中位数？如果从数据流中读出奇数个数值，那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值，那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流，使用GetMedian()方法获取当前读取数据的中位数。这题目没做出来，虽然知道大致的思路，但是始终没跳出来，选择看题解，学习更好的代码编写思路。从左到右遍历，将数字和符号分别存入数字栈和符号栈。通过快排对数组里进行排序，然后去中位数进行输出。数字直接进入数字栈，一共调用运算。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【重建二叉树|输出二叉树的右视图|二叉搜索树与双向链表】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/149280819</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/149280819</guid><author>XiaoChe21</author><pubDate>Fri, 11 Jul 2025 18:39:03 +0800</pubDate><description><![CDATA[在中序序列中确定该元素的位置，并将前序、中序序列划分为左右子树两部分；例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}，则重建出如下图所示。给定节点数为 n 的二叉树的前序遍历和中序遍历结果，请重建出该二叉树并返回它的头结点。其次，对二叉树进行从右至左的层序遍历，将每层的第一个元素添加至最终的链表中。对其进行中序遍历，记录当前结点和前一个结点指针，对每个结点进行上述操作。请根据二叉树的前序遍历，中序遍历恢复二叉树，并打印出二叉树的右视图。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【二叉搜索树的最近公共祖先|在二叉树中找到两个节点的最近公共祖先】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/149021386</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/149021386</guid><author>XiaoChe21</author><pubDate>Mon, 30 Jun 2025 13:29:23 +0800</pubDate><description><![CDATA[1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q，最近公共祖先LCA(T,p,q)表示一个节点x，满足x是p和q的祖先且x的深度尽可能大。2.二叉搜索树是若它的左子树不空，则左子树上所有节点的值均小于它的根节点的值；若它的右子树不空，则右子树上所有节点的值均大于它的根节点的值。给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2，请找到 o1 和 o2 的最近公共祖先节点。当两个节点在上述两种情况下被找到的时候，修改这个节点值。3.所有节点的值都是唯一的。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【滑动窗口的最大值|寻找第K大|最小的K个数】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148922610</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148922610</guid><author>XiaoChe21</author><pubDate>Thu, 26 Jun 2025 12:01:40 +0800</pubDate><description><![CDATA[例如，如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3，那么一共存在6个滑动窗口，他们的最大值分别为{4,4,6,6,6,5}；针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个： {[2,3,4],2,6,2,5,1}， {2,[3,4,2],6,2,5,1}， {2,3,[4,2,6],2,5,1}， {2,3,4,[2,6,2],5,1}， {2,3,4,2,[6,2,5],1}， {2,3,4,2,6,[2,5,1]}。数据范围：0≤k,n≤100000≤。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【用两个栈实现队列|包含min函数的栈|有效括号序列】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148895442</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148895442</guid><author>XiaoChe21</author><pubDate>Wed, 25 Jun 2025 11:29:31 +0800</pubDate><description><![CDATA[队列中的元素为int类型。定义栈的数据结构，请在该类型中实现一个能够得到栈中所含最小元素的 min 函数，输入操作时保证 pop、top 和 min 函数操作时，栈中一定有元素。输入:  [“PSH-1”,“PSH2”,“MIN”,“TOP”,“POP”,“PSH1”,“TOP”,“MIN”]括号必须以正确的顺序关闭，"()“和”()[]{}“都是合法的括号序列，但”(]“和”([)]"不合法。"PSH-1"表示将-1压入栈中，栈中元素为-1。"PSH1"表示将1压入栈中，栈中元素为1，-1。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【合并二叉树|二叉树的镜像】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148870022</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148870022</guid><author>XiaoChe21</author><pubDate>Tue, 24 Jun 2025 13:50:40 +0800</pubDate><description><![CDATA[今天要面试，所以只做了两道题。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【比较版本号|二叉树的三序遍历|二叉树的最大深度】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148842635</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148842635</guid><author>XiaoChe21</author><pubDate>Mon, 23 Jun 2025 11:21:31 +0800</pubDate><description><![CDATA[二. 如果版本号没有指定某个下标处的修订号，则该修订号视为0。因为"1.1"的版本号相当于"1.1.0"，第3位修订号的下标为0，小于1。版本号是由修订号组成，修订号与修订号之间由一个"."连接。1个修订号可能有多位数字组成，修订号可能包含前导0，且是合法的。例如，1.02.11，0.1，0.2都是合法的版本号。一. 比较版本号时，请按从左到右的顺序依次比较它们的修订号。比如"0.1"和"0.01"的版本号是相等的。修订号从左到右编号，下标从0开始，最左边的修订号下标为0，下一个修订号下标为1，以此类推。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【寻找峰值|数组中的逆序对|旋转数组的最小数字】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148812452</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148812452</guid><author>XiaoChe21</author><pubDate>Sat, 21 Jun 2025 17:13:15 +0800</pubDate><description><![CDATA[有一个长度为 n 的非降序数组，比如[1,2,3,4,5]，将它进行旋转，即把一个数组最开始的若干个元素搬到数组的末尾，变成一个旋转数组，比如变成了[3,4,5,1,2]，或者[4,5,1,2,3]这样的。请问，给定这样一个旋转数组，求数组中的最小值。本题是通过归并排序进行求解逆序对数的，在归并排序中，本身就依赖于逆序对数的计算，因此只需要对其排序，就可以求出逆序对数量。每次将元素段一分为二，比较两个元素段中的最大值，通过递归算法对齐不断的划分，直到左右两侧指针指向同一个元素，或相邻元素。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【删除有序链表中重复的元素-I|删除有序链表中重复的元素-II|二分查找-I】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148782355</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148782355</guid><author>XiaoChe21</author><pubDate>Fri, 20 Jun 2025 09:44:22 +0800</pubDate><description><![CDATA[用空间换时间的思路，建一个数组，把所有出现过的数字存进去，然后遍历数组，将所有值唯一的数组下标加入链表中。给出的链表为1→2→3→3→4→4→51→2→3→3→4→4→5, 返回1→2→51→2→5.给出一个升序排序的链表，删除链表中的所有重复出现的元素，只保留原链表中只出现一次的元素。给出的链表为1→1→2→3→31→1→2→3→3,返回1→2→31→2→3.给出的链表为1→1→1→2→31→1→1→2→3, 返回2→32→3.给出的链表为1→1→21→1→2,返回1→21→2.]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【单链表的排序|判断一个链表是否为回文结构|链表的奇偶重排】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148761292</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148761292</guid><author>XiaoChe21</author><pubDate>Thu, 19 Jun 2025 10:48:57 +0800</pubDate><description><![CDATA[给定一个单链表，请设定一个函数，将链表的奇数位节点和偶数位节点分别放在一起，重排后输出。遍历链表，分别将奇偶数位元素以尾插法插入至不同的链表中，然后将两个链表拼接在一起。将链表元素放置在一个数组中，对数组进行双指针双端遍历，直到两个指针相遇。≤105，链表中每个节点的值满足 ∣val∣≤107∣。≤105，节点中的值都满足 0≤val≤10000≤。给定一个节点数为n的无序单链表，对其按升序排序。数据范围： 链表节点数 0≤n≤1050≤。数据范围：节点数量满足 0≤n≤1050≤。链表转数组，然后快排，]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【链表中倒数最后k个结点|删除链表的倒数第n个节点|两个链表的第一个公共结点】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148738407</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148738407</guid><author>XiaoChe21</author><pubDate>Wed, 18 Jun 2025 13:31:42 +0800</pubDate><description><![CDATA[输入一个长度为 n 的链表，设链表中的元素的值为 ai ，返回该链表中倒数第k个节点。如果该链表长度小于k，请返回一个长度为 0 的链表。数据范围：0≤n≤1050≤na**ik≤109要求：空间复杂度 O(n)On)，时间复杂度 O(n)On进阶：空间复杂度 O(1)O(1)，时间复杂度 O(n)On思考：设置双指针，让第一个指针先移动k个长度，然后两个指针一起移动。当第一个指针移动到最后时，第二个指针指的就是目标节点。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【合并k个已排序的链表|判断链表中是否有环|链表中环的入口结点]]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148714373</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148714373</guid><author>XiaoChe21</author><pubDate>Tue, 17 Jun 2025 13:58:49 +0800</pubDate><description><![CDATA[输入分为两部分，第一部分为链表，第二部分代表是否有环，然后将组成的head头结点传入到函数里面。对有环链表进行遍历，会陷入无限循环，因此记录链表长度，当达到最大值的时候，一定存在环。给一个长度为n链表，若其中包含环，请找出该链表的环的入口结点，否则，返回null。因此仅需记录pre和cur节点，当出现cur<=pre时，即为环入口，返回cur。判断给定的链表中是否有环。对优先队列进行遍历，将最小的节点以尾插法的形式插入新链表中，维持升序。≤10000，链表中任意节点的值满足 ∣val∣<=100000∣。]]></description><category></category></item><item><title><![CDATA[牛客刷题日记【反转链表|链表内指定区间反转|合并两个排序的链表】]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/148693978</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/148693978</guid><author>XiaoChe21</author><pubDate>Mon, 16 Jun 2025 16:07:28 +0800</pubDate><description><![CDATA[给定一个单链表的头结点pHead(该头节点是有值的，比如在下图，它的val是1)，长度为n，反转该链表后，返回新链表的表头。数据范围： 链表长度 0<size≤1000，0<m≤n≤size，链表中每个节点的值满足 ∣val∣≤1000。遍历整个链表，在指定的起始位置开始头插法，在指定的终点结束，最后返回头指针。输入两个递增的链表，单个链表的长度为n，合并这两个链表并使新链表中的节点仍然是递增排序的。指向元素的head指针不是万能的，可能指向的元素，在链表中被调换位置，并非头指针。]]></description><category></category></item><item><title><![CDATA[|Boids|鸟群模型|鸟群算法|学习笔记 - 论文学习]]></title><link>https://blog.youkuaiyun.com/XiaoChe21/article/details/120702044</link><guid>https://blog.youkuaiyun.com/XiaoChe21/article/details/120702044</guid><author>XiaoChe21</author><pubDate>Mon, 11 Oct 2021 14:29:19 +0800</pubDate><description><![CDATA[本文基于Craig Reynolds于1986年发布的《Flocks, Herds, and Schools: A Distributed Behavioral Model》进行学习和总结
通过一段原文，一段分析的方法，进行分析
概述

·
·
摘要

The aggregate motion of a flock of birds, a herd of land animals, or a
school of fish is a beautiful and familiar part of the nat]]></description><category></category></item></channel></rss>