<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AnNing_007的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/AnNing_007</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AnNing_007]]></copyright><item><title><![CDATA[Thrift请求丢失字段(记一次坑爹请求)]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/101263838</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/101263838</guid><author>AnNing_007</author><pubDate>Fri, 30 Jul 2021 19:58:59 +0800</pubDate><description><![CDATA[红黑树的定义：是一种自平衡二叉查找树。能够在插入和删除操作时保持二叉树的平衡，可以在O(logN)时间内做查找，删除、插入。

红黑树的性质：

1、节点是红色或者黑色

2、根节点是黑色

3、每个叶子节点都是黑色的空节点（null）

3、每个红色节点的两个子节点都是黑色（从每个叶子到根的所有路径上不能有两个连续的红色节点）

4、从任一节点到其叶子节点的所有路径包含相同数目的黑色节点。
...]]></description><category></category></item><item><title><![CDATA[堆排序]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/102511145</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/102511145</guid><author>AnNing_007</author><pubDate>Fri, 11 Oct 2019 22:00:55 +0800</pubDate><description><![CDATA[public class HeapSort {
    private static void heapSort(int[] arr, int count) {
        //1.构建大顶堆
        for(int i=arr.length/2-1;i&gt;=0;i--){
            //从第一个非叶子结点从下至上，从右至左调整结构
            adju...]]></description><category></category></item><item><title><![CDATA[希尔排序]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/102511137</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/102511137</guid><author>AnNing_007</author><pubDate>Fri, 11 Oct 2019 22:00:13 +0800</pubDate><description><![CDATA[/**
 * @Author: AnNing
 * @Description:
 * @Date: Create in 10:48 2019/6/20
 */
public class ShellSort {
    /**
     * 希尔排序
     * @param arr 待排数组
     */
    public static void shellSort(int[] arr)...]]></description><category></category></item><item><title><![CDATA[归并排序]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/102511126</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/102511126</guid><author>AnNing_007</author><pubDate>Fri, 11 Oct 2019 21:59:29 +0800</pubDate><description><![CDATA[/**
 * 归并排序
 * @Author: AnNing
 * @Description:
 * @Date: Create in 11:28 2019/6/18
 */
public class MergeSort {

    /**
     *
     * 将arr[l...mid]和arr[mid+1...r]两部分进行归并
     * @param arr
     * @p...]]></description><category></category></item><item><title><![CDATA[冒泡排序]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/102511108</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/102511108</guid><author>AnNing_007</author><pubDate>Fri, 11 Oct 2019 21:58:44 +0800</pubDate><description><![CDATA[public class BubbleSort {

    public static void bubbleSort(int [] a){
        if(a.length!=0||a!=null){
             for(int i=a.length;i&gt;0;i--){
                 for(int j=0;j&lt;i-1;j++){
    ...]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/102511096</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/102511096</guid><author>AnNing_007</author><pubDate>Fri, 11 Oct 2019 21:58:06 +0800</pubDate><description><![CDATA[/**
 * 快速排序主要是每次都找到基准元素的位置，然后再分而治之
 * 指针交换法：1、将第一个元素当做基准元素，第一个元素为left，最后一个为right
 * 如果left!=right时,将right与pivot比较，如果大于则向左移动，否则则切换到left；
 * 切换到left时，如果left比pivot小，则left向右移动，否则切换到right
 * 交换left和right的...]]></description><category></category></item><item><title><![CDATA[排序算法——堆排序]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/99639127</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/99639127</guid><author>AnNing_007</author><pubDate>Thu, 15 Aug 2019 16:41:57 +0800</pubDate><description><![CDATA[堆的定义：

大顶堆：arr[i]&gt;=arr[2i+1]&amp;&amp;arr[i]&gt;=arr[2i+2]
	小顶堆：arr[i]&lt;=arr[2i+1]&amp;&amp;arr[i]&lt;=arr[2i+2]
堆排序的思想：

对于给定的N个记录，初始化时把这些记录看做一颗顺序存储的二叉树，然后将其调整为一个大顶堆，然后将堆的最后一个元素与堆顶元素（二叉树的根节点）进行交...]]></description><category></category></item><item><title><![CDATA[剑指Offer——字符串的排列]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/99547537</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/99547537</guid><author>AnNing_007</author><pubDate>Wed, 14 Aug 2019 10:55:58 +0800</pubDate><description><![CDATA[题目：输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

思路：看做一个递归问题；

求所有可能出现在第一个位置的字符，即将第一个位置的字符依次和后面的每一个字符进行交换；
	固定第一个字符，对后面的字符进行全排列。即对后面的字符进行递归；
对于递归来说：

终止条件就是只...]]></description><category></category></item><item><title><![CDATA[剑指Offer——把二叉树打印成多行]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/99311863</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/99311863</guid><author>AnNing_007</author><pubDate>Mon, 12 Aug 2019 16:51:12 +0800</pubDate><description><![CDATA[题目：从上到下按层打印二叉树，同一层结点从左至右输出。每一层输出一行。

思路：同从上向下打印二叉树思路，但是需要添加两个变量记录当前层未打印节点和下一层需要打印的节点

代码：


import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/*
public class TreeNode {
...]]></description><category></category></item><item><title><![CDATA[剑指Offer——在O(1)时间内删除链表节点]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/98206006</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/98206006</guid><author>AnNing_007</author><pubDate>Fri, 02 Aug 2019 15:13:18 +0800</pubDate><description><![CDATA[思路：

1、我们要删除节点i，先把节点i的下一个节点j的内容复制到i，然后把i的指针指向节点j的下一个节点，因此删除节点j;等同于删除节点i;

2、如果节点位于链表的尾部，那么只能从头节点开始遍历并删除

3、如果只有一个节点时，删除节点之后，还需要把链表的头节点设置为null；

时间复杂度分析：

对于n-1个非尾节点而言，时间复杂度为O(1);

对于尾结点而言，时间复杂度为O(n);
...]]></description><category></category></item><item><title><![CDATA[剑指Offer——打印从1到最大的N位数]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/98182173</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/98182173</guid><author>AnNing_007</author><pubDate>Fri, 02 Aug 2019 11:22:28 +0800</pubDate><description><![CDATA[题目：输入数字n，按照顺序打印出1-最大的n位数的十进制数，比如输入3，则打印1,2,3~一直到最大的3位数999；

思路一：题目最大的陷阱，当我们按照10的你次方计算的时候，忽略了如果醉的数超出了int或long数据的范围该怎么处理；

所以可以用字符串的操作来代替数学运算；新建一个长度为n的字符串数组，分为两步：

在字符串上模拟加法
	打印字符串
优化思路：新建一个长度为n的字符串数组，在...]]></description><category></category></item><item><title><![CDATA[剑指Offer——二进制中1的个数]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/98102076</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/98102076</guid><author>AnNing_007</author><pubDate>Thu, 01 Aug 2019 20:53:46 +0800</pubDate><description><![CDATA[题目：输入一个整数，输出该数二进制表示中1的个数。其中负数用补码表示。

二进制的运算：



移位：

1、右移：m&gt;&gt;n:表示把m右移n位，最右边的n位将会被丢弃

如果无符号：用0填充左边的N位，

如果有符号：用符号填充左边的N位，正数为0，负数为1

2、左移：m&lt;&lt;n:将m左移n位，在左移N位的时候，左边的数值将会被丢弃，在右边补充0

思路：共三种思路；

思...]]></description><category></category></item><item><title><![CDATA[剑指Offer——剪绳子]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/98100156</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/98100156</guid><author>AnNing_007</author><pubDate>Thu, 01 Aug 2019 20:26:02 +0800</pubDate><description><![CDATA[题目：给你一根长度为n绳子，请把绳子剪成m段（m、n都是整数，n&gt;1并且m≥1）。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]*k[1]*…*k[m]可能的最大乘积是多少？例如当绳子的长度是8时，我们把它剪成长度分别为2、3、3的三段，此时得到最大的乘积18。

思路一：动态规划；

自底向上以此求出绳子为1,2,3,4.....最大的乘积，保存在一个数组中；计算后面乘积...]]></description><category></category></item><item><title><![CDATA[剑指Offer——字符流中第一个不重复的字符]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/97521859</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/97521859</guid><author>AnNing_007</author><pubDate>Sat, 27 Jul 2019 15:51:14 +0800</pubDate><description><![CDATA[原文链接：cyc2018.github.io

题目：请实现一个函数用来找出字符流中第一个只出现一次的字符。例如，当从字符流中只读出前两个字符"go"时，第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时，第一个只出现一次的字符是"l"。

代码：


import java.util.Queue;
import java.util.LinkedList;
public...]]></description><category></category></item><item><title><![CDATA[剑指Offer——把字符串转换成整数]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/97521302</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/97521302</guid><author>AnNing_007</author><pubDate>Sat, 27 Jul 2019 15:46:11 +0800</pubDate><description><![CDATA[原文链接：cyc2018.github.io

题目：将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能，但是string不符合数字要求时返回0)，要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

代码：


public int StrToInt(String str) {
    if (str == null || st...]]></description><category></category></item><item><title><![CDATA[剑指Offer——构建乘积数组]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/97517410</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/97517410</guid><author>AnNing_007</author><pubDate>Sat, 27 Jul 2019 15:09:53 +0800</pubDate><description><![CDATA[原文链接：cyc2018.github.io

题目：给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。

代码：


import java.util.ArrayList;
public class Solution {
    public i...]]></description><category></category></item><item><title><![CDATA[剑指Offer——不用加减乘除做加法]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/97517041</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/97517041</guid><author>AnNing_007</author><pubDate>Sat, 27 Jul 2019 15:06:34 +0800</pubDate><description><![CDATA[原文链接：cyc2018.github.io

题目：写一个函数，求两个整数之和，要求在函数体内不得使用+、-、*、/四则运算符号。

思路：

a ^ b 表示没有考虑进位的情况下两数的和，(a &amp; b) &lt;&lt; 1 就是进位。

递归会终止的原因是 (a &amp; b) &lt;&lt; 1 最右边会多一个 0，那么继续递归，进位最右边的 0 会慢慢增多，最后进位会变为 0...]]></description><category></category></item><item><title><![CDATA[剑指Offer——求1+2+3+...+n]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/97516416</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/97516416</guid><author>AnNing_007</author><pubDate>Sat, 27 Jul 2019 15:01:19 +0800</pubDate><description><![CDATA[原文链接：cyc2018.github.io

题目：求1+2+3+...+n，要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）。

思路：

使用递归解法最重要的是指定返回条件，但是本题无法直接使用 if 语句来指定返回条件。

条件与 &amp;&amp; 具有短路原则，即在第一个条件语句为 false 的情况下不会去执行第二个...]]></description><category></category></item><item><title><![CDATA[剑指Offer——扑克牌的顺子]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/97514344</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/97514344</guid><author>AnNing_007</author><pubDate>Sat, 27 Jul 2019 14:42:53 +0800</pubDate><description><![CDATA[题目：从扑克牌中随机抽取5张牌，判断是不是一个顺子，即这5张牌是不是连续的。2~10为数字本身，A为1，J为11，Q为12,K为13，大王和小王可以堪称任意数字。

思路：1、统计数字中0的个数n

     2、统计排序之后相邻数字之间的空缺总数m，如果m&lt;=n,那么是顺子，否则不是

     注意：如果非0数字重复出现，则 不是连续的。

代码：


import...]]></description><category></category></item><item><title><![CDATA[剑指Offer——滑动窗口的最大值]]></title><link>https://blog.youkuaiyun.com/AnNing_007/article/details/97489228</link><guid>https://blog.youkuaiyun.com/AnNing_007/article/details/97489228</guid><author>AnNing_007</author><pubDate>Sat, 27 Jul 2019 11:33:25 +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...]]></description><category></category></item></channel></rss>