<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jackson__Z的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jackson__Z</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jackson__Z]]></copyright><item><title><![CDATA[栈的经典算法问题]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/132118721</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/132118721</guid><author>Jackson__Z</author><pubDate>Sat, 05 Aug 2023 17:58:23 +0800</pubDate><description><![CDATA[最大栈的实现方法跟最小栈也十分类似，只有在处理popMax()的时候会有所不同，这里的思路是新建一个数组buffer，检索栈中的元素是否等于最大值，如果不等于则向buffer里放入从栈里pop出来的元素，直到找到最大值元素，然后把最大值元素pop出来，再把buffer里的元素append到原栈里。这算是最经典的栈的问题了，实现这个问题的思路是创建一个栈，遍历整个数组，如果遇到左括号就压栈，如果是右括号就弹栈，最后比较弹栈的元素能不能和遇到的右括号匹配上。为了方便匹配，我们可以创建一个字典来匹配。]]></description><category></category></item><item><title><![CDATA[如何基于数组实现栈]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/132118624</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/132118624</guid><author>Jackson__Z</author><pubDate>Sat, 05 Aug 2023 13:01:53 +0800</pubDate><description><![CDATA[在Python里就是通过对数组操作append()和pop()来实现压栈和弹栈。栈的本质就是先入后出。]]></description><category></category></item><item><title><![CDATA[双指针的妙用]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/131985951</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/131985951</guid><author>Jackson__Z</author><pubDate>Sat, 29 Jul 2023 19:47:29 +0800</pubDate><description><![CDATA[这里的思路是吧数组分成两半，分别反转就可以了，实现简单。注意这里使用了num[:]而不是nums，如果用了nums意思是重新定义一个名叫nums的数组。如果要求数组的区间，依然可以用双指针的思想，用一个新的数组，里面放上tuple表示区间范围，最后在print出来。其中slow来代表更新后的数组，fast用来遍历数组。还可以用冒泡排序，但是冒泡排序时间复杂度为O(n^2)，在处理大量数据的时候不占优。这里可以使用两个指针来实现，但是用两个指针也有几种方式。1.1 删除指定值的元素。4. 数组的区间问题。]]></description><category></category></item><item><title><![CDATA[数组的增删改查]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/131968057</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/131968057</guid><author>Jackson__Z</author><pubDate>Fri, 28 Jul 2023 13:09:22 +0800</pubDate><description><![CDATA[如果有两个单调增的数组，把他们合并可以采用后插法，如果从前往后插入，每次都需要改动后面所有的元素值，但是从后往前插入则会避免这种情况。这里简单的方法是初始化两个值increase 和 decrease， 然后遍历数组两两比较大小，最后返回知否为单调。python里有函数可以很简单的合并两个数组，并且排序，但是一般面试不会让用。数组的增删改查看似简单，但是还要多去操作才能更好的掌握边界值的判断。注意：这里要判断array里到底有没有要删除的元素。这里还可以再优化一下，使用二分查找可以提高查找效率。]]></description><category></category></item><item><title><![CDATA[算法通关村第二关--链表反转进阶]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/131915317</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/131915317</guid><author>Jackson__Z</author><pubDate>Wed, 26 Jul 2023 13:25:51 +0800</pubDate><description><![CDATA[另外，在代码实现过程中出现了下面的错误，在此总结原因 ：我把cur放到了循环外层导致了一些问题，假设我在反转1，2，3，4，5，在完成了第一次循环后我的cur为2，但是原链表变成了2，1，3，4，5， 导致2的下一个元素又变成了1 而不是我希望的3，因此陷入了死循环，右图为改正过后的代码。第一个是直接在链表上进行反转，确定好需要反转的区间里面的第一个元素（cur）和反转区间前的那个元素（pre）后，不停的把cur后面那个元素放到pre后面，循环right-left次，即可实现反转。2. 两两交换链表元素。]]></description><category></category></item><item><title><![CDATA[算法通关村第二关 -- 链表反转]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/131880257</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/131880257</guid><author>Jackson__Z</author><pubDate>Sun, 23 Jul 2023 15:50:32 +0800</pubDate><description><![CDATA[1）根据当前的节点cur，找到下一个节点next。2）把当前节点的指针指向前一个节点（head）3）把head节点更新为cur。2. 直接反转链表（重要！最后返回ans.next。4）把cur更新为next。]]></description><category></category></item><item><title><![CDATA[算法通关村第一关-链表经典问题]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/131795386</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/131795386</guid><author>Jackson__Z</author><pubDate>Fri, 21 Jul 2023 15:36:40 +0800</pubDate><description><![CDATA[4）差和双指针：利用双指针和两个链表长度的差值来索引到长链表的中间位置，使得长链表的后半部分和短链表同长，再同时推进双指针来找到相同的节点。3）拼接字符串：可以优化成同时遍历第一个链表和第二个链表，直到便利到最后再从另一个链表的开始继续遍历，直到找到两个指针的值相同的那个。1）使用哈希表与集合：把一串链表放到集合里，再遍历另一个链表。1. 剑指offer52 -- 第一个公共子节点问题。2）使用栈：把两个链表放到栈里，从后往前查找相同的值。]]></description><category></category></item><item><title><![CDATA[算法通关村第一关--链表青铜挑战笔记]]></title><link>https://blog.youkuaiyun.com/Jackson__Z/article/details/131788792</link><guid>https://blog.youkuaiyun.com/Jackson__Z/article/details/131788792</guid><author>Jackson__Z</author><pubDate>Tue, 18 Jul 2023 15:59:47 +0800</pubDate><description><![CDATA[其他情况则找到cur元素值为要删除的元素值的位置。找到以后pre元素指针指向cur元素指针指向的元素就可以了。如果不是，使用count来查看要插入的元素的位置（注意用pre的元素查找），找到后先让当前元素的指针指向pre指向的元素，再让pre元素的指针指向新增元素，完成中间元素的插入。尾部：先判断链表是否为空，如果为空链表，直接让head指向当前新增元素就可以。如果不为空，用while找到链表尾部的元素，让尾部元素的next指针指向新增元素。头部：先把新增元素的指针指向head，再让head指向当前元素。]]></description><category></category></item></channel></rss>