<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[TaoTop1的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/TaoTop1</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; TaoTop1]]></copyright><item><title><![CDATA[剑指OFFER第24题--反转链表]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/127759886</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/127759886</guid><author>TaoTop1</author><pubDate>Tue, 08 Nov 2022 22:06:32 +0800</pubDate><description><![CDATA[而且，你只需要思考问题 A 与子问题 B、C、D 两层之间的关系即可，不需要一层一层往下思考子问题与子子问题，子子问题与子子子问题之间的关系(也就是说，递归只能考虑当前层和下一层的关系，不能继续往下深入)。一般，我们需要考虑F(n)和F(n-1)的关系，那么这里，如果n代表以node为头节点的单向链表，那么n-1就代表以node.next为头节点的单向链表.所以，这个问题就可以是：F(node=1)=F(node=2)+ 反转node=2和node=1。那么，F(node=1)=F(node=2)+?]]></description><category></category></item><item><title><![CDATA[剑指OFFER第22题--链表中倒数第k个节点]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/127740288</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/127740288</guid><author>TaoTop1</author><pubDate>Mon, 07 Nov 2022 22:06:59 +0800</pubDate><description><![CDATA[定义指针fast，slow，倒数多少个，fast就移动多少步，然后slow和fast一起移动，直到fast指向nullptr。]]></description><category></category></item><item><title><![CDATA[剑指OFFER第21题--调整数组顺序使奇数位于偶数前面]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/127660150</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/127660150</guid><author>TaoTop1</author><pubDate>Wed, 02 Nov 2022 22:23:17 +0800</pubDate><description><![CDATA[使用一个额外数组，如果是奇数，就放到该数组前面；如果是偶数，就放到该数组后面。]]></description><category></category></item><item><title><![CDATA[剑指OFFER第20题--表示数值的字符串]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/127642553</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/127642553</guid><author>TaoTop1</author><pubDate>Tue, 01 Nov 2022 22:54:49 +0800</pubDate><description><![CDATA[算法原理：开始时，自动机处于“初始状态”，随后，它顺序的读取字符串中的每一个字符，并根据当前状态和读入的字符，按照某个事先约定好的“转移规则”，从当前状态转移到下一个状态；当字符串全部读取完毕后，如果自动机处于某个“接受状态”，则判定该字符串“被接受”；需要注意的是，当没有对应的“转移规则”时，算法将提前中止，此时也可以被视作“被拒绝”。该方法可以看做一种暴力枚举方法的延伸：它穷举了在任何一种情况下，对应任何输入，需要做的事情。自动机与字符串查找算法（KMP算法）有着密切联系，并且是实现正则表达式的基础。]]></description><category></category></item><item><title><![CDATA[插值查找算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119864072</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119864072</guid><author>TaoTop1</author><pubDate>Mon, 23 Aug 2021 10:34:07 +0800</pubDate><description><![CDATA[核心思想：对于一个有序数组，求mid的公式为：


mid=(high-low)*(findVal-arr[low])/(arr[high]-arr[low]);


代码实现：


public class InterpolationSearch {

    private static int interpolationSearch(int[] arr,int findVal){

        int low=0;
        int high=arr.length-1;
        ..]]></description><category></category></item><item><title><![CDATA[斐波那契查找算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119863747</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119863747</guid><author>TaoTop1</author><pubDate>Mon, 23 Aug 2021 10:30:43 +0800</pubDate><description><![CDATA[核心思想：对于一个有序数组，按照黄金分割点划分数组，而不像二分查找算法按照中间点划分。


代码实现 步骤：

计算出一个斐波那契数组
	找出斐波那契数组中比有序数组长度稍大的那个数
	建立一个临时数组，长度为第二步中找出的那个数，元素为原来有序数组中的元素，超过原来数组长度的部分用原来数组最后一位的元素补齐。
	进入迭代，mid的公式为：mid=left+fib[k-1]-1;
代码实现：


import java.util.Arrays;

public class FibonacciSearch..]]></description><category></category></item><item><title><![CDATA[二分查找算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119863200</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119863200</guid><author>TaoTop1</author><pubDate>Mon, 23 Aug 2021 10:14:55 +0800</pubDate><description><![CDATA[核心思想：对于一个有序数组，如果目标值小于中间值，则目标值在数组的左半边；反之，则在右半边；或者，目标值正好是中间值。通过不断缩小查找范围，从而找出目标值的索引。


递归方法代码实现


public class BinarySearch {

    private static int binarySearch(int[] arr,int left,int right,int findVal){

        if(left&gt;right){
            return -1;
..]]></description><category></category></item><item><title><![CDATA[有关二叉树的知识点]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119775546</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119775546</guid><author>TaoTop1</author><pubDate>Sun, 22 Aug 2021 09:57:21 +0800</pubDate><description><![CDATA[0 相关概念

二叉树的特点：

每个节点最多有两个子树
	每个子节点都是父节点的左子节点或者右子节点
满二叉树的特点：

叶子节点都在最下一层
	节点总数为（2^n-1）个（n为树的深度；减一是因为根节点只有一个）
完全二叉树的特点：

所有叶子结点都在最后一层或者倒数第二层
	最后一层的叶子节点在左边连续，倒数第二层的节点在右边连续
	满二叉树一定是一个完全二叉树
	已知完全二叉树的总节点个数为n求叶子节点个数：当n为奇数时：（n+1）/2
	当n为偶数时 : n/2
	已知完全二叉树的总节点个数...]]></description><category></category></item><item><title><![CDATA[Shell排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119774058</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119774058</guid><author>TaoTop1</author><pubDate>Wed, 18 Aug 2021 10:27:22 +0800</pubDate><description><![CDATA[核心思想：希尔排序是在各种排序的基础上增加了分组的概念，


{n/2,(n/2)/2...1}，称为增量序列

通过不断将增量序列减小，分的组逐渐变少，从而实现数组有序。


代码实现重点：

在外层循环中定义增量序列，从arr.length开始，每次迭代除以2。
	在组内实现一个排序算法。
代码实现如下所示：


import java.util.Arrays;

public class ShellSort {

    
    private static void shellSort(in...]]></description><category></category></item><item><title><![CDATA[选择排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119752447</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119752447</guid><author>TaoTop1</author><pubDate>Tue, 17 Aug 2021 11:24:03 +0800</pubDate><description><![CDATA[核心思想：在每轮循环中，找出该次循环中的最大数（或最小数）的索引，将该索引上的数与本次循环中数组最大索引上的数交换。


代码实现重点：

从后向前遍历数组，定义一个变量maxIndex记录该轮循环数组最大数的索引。
	在最大索引前面（包含该索引）寻找该轮循环中最大数的索引，并通过赋值给maxIndex记录该索引位置。
	将该轮循环中数组的最大索引与该轮循环中的最大数索引交换。

import java.util.Arrays;

public class selsectionsort {

    p..]]></description><category></category></item><item><title><![CDATA[基数排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119747553</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119747553</guid><author>TaoTop1</author><pubDate>Tue, 17 Aug 2021 10:54:23 +0800</pubDate><description><![CDATA[核心思想：定义10个桶，即一个二维数组，分别是0-9行，同时取出每个数的个位或者百位或者千位等，将原数放入取出的数字对应的桶（行）中。然后依次按行取出二维数组中的数放回原数组。将最大数的所有位放完后，数组就有序了。


代码实现重点：

定义一个变量a（1,10,100等），用数来除以这个数后模以10得到数的各个位置上的数字。
	定义一个二维数组来存放数，定义一个一维数组来记录每行有多少个数。
	当a小于最大数的最大位数时，将数放在二维数组中，并记录该行有多少个数；将二维数组中的数按行取出，放回原数组，将.]]></description><category></category></item><item><title><![CDATA[快速排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119710648</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119710648</guid><author>TaoTop1</author><pubDate>Sun, 15 Aug 2021 11:23:32 +0800</pubDate><description><![CDATA[核心思想：定义一个参考值，将比参考值小的放在参考值左边，比参考值大的放右边。这样，就找出了参考值在数组中的位置。


代码实现重点：

方法传入三个参数，原数组，左边界low，右边界high。
	定义两个指针指向左右边界，以便来遍历数组；再定义一个临时变量记录参考值。
	当左指针小于右指针时，先向左移动右指针（？），找到一个比参考值小的元素，然后覆盖左指针指向的元素（？），左指针移动一位；再向右移动左指针，指向一个比参考值大的元素，覆盖右指针指向的元素，右指针移动一位。
	当退出while循环后，左右指..]]></description><category></category></item><item><title><![CDATA[归并排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119710245</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119710245</guid><author>TaoTop1</author><pubDate>Sun, 15 Aug 2021 10:30:08 +0800</pubDate><description><![CDATA[核心思想：采用分治算法，“分”可以用递归实现，重点是“治”的过程，即合并的过程。


代码重点：

传入的参数中不仅需要原数组，还需要一个临时数组，来保存合并的结果。
	方法传入形参中需要左右边界和中位数索引。
	定义两个变量，一个指向左半数组的左边界，一个指向右半数组的左边界（即mid+1处）。
	还需要定义一个临时变量，当做临时数组的索引指针。
	将左右两半数组中的元素按照从小到大的顺序，依次放入临时数组中。需要注意的是，因为使用了while循环，条件中取得是左右两边界的并集，所以可能有半边数组还有..]]></description><category></category></item><item><title><![CDATA[插入排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119697116</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119697116</guid><author>TaoTop1</author><pubDate>Sun, 15 Aug 2021 10:02:49 +0800</pubDate><description><![CDATA[思想：将元素插入到已经排好序的部分数组中。当元素按照从小到大的顺序排序时，若该元素比前面一个元素大，则已经找到位置，不需要再向前面进行比较，直接退出while循环

]]></description><category></category></item><item><title><![CDATA[堆排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119669638</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119669638</guid><author>TaoTop1</author><pubDate>Fri, 13 Aug 2021 11:01:51 +0800</pubDate><description><![CDATA[整体思想：

从第一个非叶子节点开始将数组初始化为一个大顶堆
	大顶堆上第一个元素为最大元素，即数组0号位元素，将该元素放到数组末位上
	重新调整大顶堆
	继续将数组0号位元素放到倒数第二位置上
注意：如果是从大到小排序，则应该使用小顶堆。

代码实现重点：

调整大顶堆的函数应该传入三个参数，数组，调整起始点，数组长度。
	将起始点的值保留，将其赋给子节点（如果子节点大于父节点）
	定义指针k指向该节点的左子节点以及左孙子节点等，如果右子节点大于左子节点，则指向右子节点
	如果子节点的值大于初始节点的值.]]></description><category></category></item><item><title><![CDATA[冒泡排序算法]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119667954</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119667954</guid><author>TaoTop1</author><pubDate>Fri, 13 Aug 2021 09:44:59 +0800</pubDate><description><![CDATA[思想：假设，从小到大排序。只需将大的元素往后迁移，通过交换相邻两元素的位置，使得最大的元素放在最后面，第二大的元素放在倒数第二位。



import java.util.Arrays;

public class BubbleSort {

    private static void bubbleSort(int[] arr){

        int len=arr.length;
        for(int i=0;i&lt;len;i++){
            for(int j=.]]></description><category></category></item><item><title><![CDATA[剑指66机器人的运动范围]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119084464</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119084464</guid><author>TaoTop1</author><pubDate>Sun, 25 Jul 2021 17:22:38 +0800</pubDate><description><![CDATA[public class JZ6601 {

    private final static int[][] next={{0,1},{0,-1},{1,0},{-1,0}};
    private int cnt=0;
    private int rows;
    private int cols;
    private int threshold;
    private int[][] digitSum;

    public int movingCount(int threshold.]]></description><category></category></item><item><title><![CDATA[剑指65矩阵中的路径]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119062340</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119062340</guid><author>TaoTop1</author><pubDate>Sat, 24 Jul 2021 18:55:35 +0800</pubDate><description><![CDATA[import java.util.*;
public class JZ6501 {

    private final static int[][] next={{0,-1},{0,1},{1,0},{-1,0}};
    
    public boolean hasPath (char[][] matrix, String word) {

        char[] words=word.toCharArray();
        for(int i=0;i&lt;matrix.length.]]></description><category></category></item><item><title><![CDATA[Linux中的硬链接和软链接]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119058988</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119058988</guid><author>TaoTop1</author><pubDate>Sat, 24 Jul 2021 15:31:54 +0800</pubDate><description><![CDATA[创建一个硬链接会产生一个文件，与原文件有相同的inode值，指向硬盘上相同的空间。当有指针指向硬盘上的该空间，就不会删除该空间里的内容。所以，当有多个文件指向该空间，删除其中一个文件，并不会删除该空间中的内容。硬链接还是有用。

    创建一个软链接，也会产生一个文件，但是该文件与原文件的inode值不一样，里面保存的是一个指向原文件的绝对路径。访问该软链接文件时，系统自动将其路径替换为该绝对路径，即不是访问软链接指向的硬盘空间，而是访问绝对路径中文件的硬盘空间。当删除绝对路径中...]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/TaoTop1/article/details/119021452</link><guid>https://blog.youkuaiyun.com/TaoTop1/article/details/119021452</guid><author>TaoTop1</author><pubDate>Fri, 23 Jul 2021 08:26:56 +0800</pubDate><description><![CDATA[判断垃圾的算法一般用引用计数法和可达性分析算法。

可达性分析算法中的Gc Root一般是虚拟机栈中引用的对象，方法区（jdk1.8后叫元数据区（Metaspace））中的静态属性或常量引用的对象，本地方法栈中（Native方法）引用的对象。

垃圾回收算法有三种，标记清除算法、标记整理算法和复制算法。





大部分初始new的对象分配在eden空间，在eden空间中垃圾比较多，为了提高效率，使用复制算法，经过一次MinorGC后，对象存储到Suvivor空间中；大对象和长期存活的对象（Survivo.]]></description><category></category></item></channel></rss>