<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ly_main的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ly_main</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ly_main]]></copyright><item><title><![CDATA[剑指offer系列之55：删除链表汇总重复的节点]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51142683</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51142683</guid><author>ly_main</author><pubDate>Wed, 13 Apr 2016 13:56:02 +0800</pubDate><description><![CDATA[问题描述：在一个排序的链表中，存在重复的结点，请删除该链表中重复的结点，重复的结点不保留，返回链表头指针。 例如，链表1->2->3->3->4->4->5 处理后为 1->2->5思路：这个链表是排序的，需要找到重复的节点，所以对链表进行遍历，而且在遍历的过程中需要对每个当前遍历的节点以及后面的节点进行比较直到遇到下一个节点不与当前节点重复。如果下一个节点与当前遍历的节点不重复，则继续遍历，直到把]]></description><category></category></item><item><title><![CDATA[剑指offer系列之54：链表中环的入口节点]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51142639</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51142639</guid><author>ly_main</author><pubDate>Wed, 13 Apr 2016 13:50:41 +0800</pubDate><description><![CDATA[题目描述：一个链表中包含环，请找出该链表的环的入口结点。 
思路：此题的思路其实 很简单，之所以出现环，是因为在整个链表中出现了重复的节点，而遇到的第一个重复的节点就是环的入口节点。所以可以使用Set来保存遍历到的节点，因为Set集合是不允许出现重复元素的，所以当一个节点被第二次添加的时候，往Set中放元素是失败的。所以可以利用这一点找出第一个重复的元素。import java.util.HashS]]></description><category></category></item><item><title><![CDATA[剑指offer系列之56：二叉树的下一个节点]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51142598</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51142598</guid><author>ly_main</author><pubDate>Wed, 13 Apr 2016 13:45:12 +0800</pubDate><description><![CDATA[题目描述：给定一个二叉树和其中的一个结点，请找出中序遍历顺序的下一个结点并且返回。注意，树中的结点不仅包含左右子结点，同时包含指向父结点的指针。思路：根据中序遍历的特点，要找到一个节点的下一个节点无非就是三种情况：1、有右子树，这时只需要把其右孩子作为下一个遍历的（并不是要找的）节点，然后沿着该节点的左子树（如果有的话）出发，直到遇到叶子节点，那么该叶子节点就是其下一个要找的节点；2、没有右子树，则]]></description><category></category></item><item><title><![CDATA[剑指offer系列之59：把二叉树打印成多行]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51142539</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51142539</guid><author>ly_main</author><pubDate>Wed, 13 Apr 2016 13:39:33 +0800</pubDate><description><![CDATA[题目描述：从上到下按层打印二叉树，同一层结点从左至右输出。每一层输出一行。思路：此题实际上与上面一题按之字形顺序打印相似，知识不需要判断打印的顺序是从左往右还是从右往左，这题的解法主要是要统计每一层的节点数。import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    Tre]]></description><category></category></item><item><title><![CDATA[剑指offer系列之58：按之字形顺序打印二叉树]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51140523</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51140523</guid><author>ly_main</author><pubDate>Wed, 13 Apr 2016 09:45:17 +0800</pubDate><description><![CDATA[题目描述：请实现一个函数按照之字形打印二叉树，即第一行按照从左到右的顺序打印，第二层按照从右至左的顺序打印，第三行按照从左到右的顺序打印，其他行以此类推。思路：此题明显是层序遍历的思路。由于需要按照之字形打印每一层，相当于在打印每一行之前需要判断上一行打印的顺序。比如，如果上一行打印的顺序使从左到右，那么下一行的打印顺序应该是从右到左。实现的这点可以采用奇数行从左到右打印，偶数行从右到左进行打印。还]]></description><category></category></item><item><title><![CDATA[剑指offer系列之57：对称二叉树的判断]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51140264</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51140264</guid><author>ly_main</author><pubDate>Wed, 13 Apr 2016 09:25:21 +0800</pubDate><description><![CDATA[问题描述：请实现一个函数，用来判断一颗二叉树是不是对称的。注意，如果一个二叉树同此二叉树的镜像是同样的，定义其为对称的。思路：前面有一题是打印输出某二叉树的镜像，回想其实现的思路是：采用层序遍历的思路对每一个遍历的节点，如果其有孩子节点，那么就交换两者。直到遍历的节点没有孩子节点为止，然而此题是对二叉树木镜像的判断，明显是更简单的，只需要进行两个判断：对节点的左孩子与其兄弟节点右孩子的判断以及对节点]]></description><category></category></item><item><title><![CDATA[剑指offer系列之53：字符流中第一个不重复的字符]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51140147</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51140147</guid><author>ly_main</author><pubDate>Wed, 13 Apr 2016 09:08:59 +0800</pubDate><description><![CDATA[题目描述：请实现一个函数用来找出字符流中第一个只出现一次的字符。例如，当从字符流中只读出前两个字符”go”时，第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时，第一个只出现一次的字符是”l”。  
输出描述：如果当前字符流没有存在出现一次的字符，返回#字符。思路：这题与前面的第一个不重复的字符有些重复了，请参照剑指offer系列之33import java.util.A]]></description><category></category></item><item><title><![CDATA[剑指offer系列之49：数组中重复的数字]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137490</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137490</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:40:17 +0800</pubDate><description><![CDATA[题目描述：在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的，但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如，如果输入长度为7的数组{2,3,1,0,2,5,3}，那么对应的输出是重复的数字2或者3。思路：此题的思路还是比较简单的，与之前找出只出现一次的数字的题目有些类似，基本思路还是创建一个Map容器，key是出现的数字，]]></description><category></category></item><item><title><![CDATA[剑指offer系列之48：把字符串转换成整数]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137471</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137471</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:37:56 +0800</pubDate><description><![CDATA[题目描述：将一个字符串转换成一个整数，要求不能使用字符串转换整数的库函数。（考虑问题的全面性）思路：这个问题本身不是很难，但是要注意考虑问题的全面性。包括字符串是否有效的判断、是否是负数以及字符串表示的整数是否越界等问题。对于字符串有效性的判断主要是null以及空串的判定；负数之所以需要判断是因为在计算的时候是有用的；而是否越界的问题也是需要考虑的。因为一个越界的数是不可能计算出来的，那么这时候可以]]></description><category></category></item><item><title><![CDATA[剑指offer系列之47：不用加减乘除做加法]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137439</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137439</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:34:47 +0800</pubDate><description><![CDATA[题目描述：写一个函数，求两个整数之和，要求在函数体内不得使用+、-、*、/四则运算符号（发散思维能力）思路：既然不能使用加减乘除，那么只剩下位运算和逻辑运算了。采用位运算的思路分为三步走：第一步，不进位对两个做异或运算（因为不考虑进位，1与1，0与0的异或运算的结果刚好是两者相加的结果）；第二步，通过与运算得到两个数的进位值，因为只有1与1进行与运算的时候才会产生进位，所以产生的进位可以看成是两者先]]></description><category></category></item><item><title><![CDATA[剑指offer系列之46：求1~n的整数的和]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137410</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137410</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:31:12 +0800</pubDate><description><![CDATA[题目描述：求1+2+3+…+n，要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）。思路：这种题目主要考查发散思维的能力。提供一种方法，java使用面向对象的方法，利用构造函数求解。public class Solution {    public int Sum_Solution(int n) {
        if(n <= 0)]]></description><category></category></item><item><title><![CDATA[剑指offer系列之45：圆圈中最后剩下的数字]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137357</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137357</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:25:05 +0800</pubDate><description><![CDATA[题目描述：用0,1,…,n-1，这n个数字排成一个圆圈，从数字0开始每次从这个圆圈里删除第m个数字，求出这个圆圈里剩下的最后一个数字。（抽象建模能力）思路1：经典的解法，用环形链表模拟圆圈，可以创建一个总共有n个节点的环形链表，然后每次在这个链表中删除第m个节点。思路2：把这n个整数做成一个环，当数到哪个数的时候就把那个数移除，并从下一个数重新开始数。所已基本思路是：使用数组模拟环，当当前的元素的值]]></description><category></category></item><item><title><![CDATA[剑指offer系列之44：扑克牌顺子]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137300</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137300</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:18:25 +0800</pubDate><description><![CDATA[题目描述：从扑克牌中随机抽取五张牌，判断这五张牌是不是顺子，2~10为数字本身，A为1，J为11，Q为12,K为13，而大王小王可以看成任何数字。（抽象建模能力）思路：需要把扑克牌的背景抽象成计算机语言，可以把五张牌看成五个数字组成的数组，大王小王为特殊的数字可以定义为0。对于五张牌是否是连续的，可以先把五个数进行排序，0可以代替任何数字，所以需要统计排序后的空缺，判断0是否能够填满空缺。所以第一步]]></description><category></category></item><item><title><![CDATA[剑指offer系列之43：左旋转字符串]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137225</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137225</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:10:40 +0800</pubDate><description><![CDATA[题目描述：字符串的左旋转操作是吧字符串前面的若干个字符转移到字符串的尾部。要求输入字符串和要左旋转的位数，输出旋转后的字符串。（知识迁移能力，字符串的处理能力）思路：比如输入字符串“abcdefg”和2，要求把字符串前面两位移到后面变为“cdefgab”，这时可以把前面两个字符ab看成一部分，cdefg看成一部分，分别旋转这两部分，得到“bagfedc”，然后再旋转整个字符串即可。public cl]]></description><category></category></item><item><title><![CDATA[剑指offer系列之42：翻转单词序列]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51137159</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51137159</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 21:04:28 +0800</pubDate><description><![CDATA[问题描述：输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。思路：对于这种问题，可以通过两次反转字符串来实现，第一部翻转句子中所有的字符，第二步翻转每个单词中字符的顺序。关键是如何实现翻转单词的函数。public class Solution {
    public String ReverseSentence(String str) {
        String result]]></description><category></category></item><item><title><![CDATA[剑指offer系列之41：和为s的连续整数序列]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51136672</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51136672</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 20:08:02 +0800</pubDate><description><![CDATA[题目描述：输入一个整数s，输出所有的和为s的连续整数序列。思路：该题和“和为s的两个整数”思路一样，考虑用两个数small和big来表示序列的最小值和最大值，首先把small初始化为1，big初始化为2，如果从small到big的序列的和大于s，可以从序列中去掉较小的值，把small加1，如果从small到big的序列的和小于s，增大big使序列包含更多的元素。因为序列中至少要含有两个数字，可以一直]]></description><category></category></item><item><title><![CDATA[剑指offer系列之40：和为的两个数字]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51136631</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51136631</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 20:02:31 +0800</pubDate><description><![CDATA[题目描述：输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们的和正好是s。思路：最慢的方法是固定一个数字，然后一次遍历数组得到和为s的另一个数字，但这种算法时间复杂度太高。因为数组是已经排序的，可以先在数组中选择两个数字，如果它们的和等于输入的s，就找到了要找的数字，如果它们的和小于s，则可以让较小的数字往后移动，如果它们的和大于s，则可以让较大的数字向前移动，知道和等于输入的s为止。]]></description><category></category></item><item><title><![CDATA[剑指offer系列之39：数组中只出现1次的数字]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51136543</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51136543</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 19:53:05 +0800</pubDate><description><![CDATA[题目描述：一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路1：借用java语言中的特定函数，可以实现，使用TreeSet中不允许有重复值的特性，可以得到数组中的单独数字，然后分别统计它们出现的次数。（这种方法需要使用java语言的特性）//num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
import]]></description><category></category></item><item><title><![CDATA[剑指offer系列之38：判断是否是平衡二叉树]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51136482</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51136482</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 19:44:32 +0800</pubDate><description><![CDATA[题目描述：输入一颗二叉树的根节点，判断该二叉树是否是平衡二叉树。思路1：所谓平衡二叉树就对某个结点来讲，其左子树的深度与右子树深度的绝对值不超过1。由于需要对每个节点进行判断，所以可以采用递归的思路进行解决。具体思路是：先求出根节点的左右子树的深度，并对两者进行判断，如果没有满足左右子树的深度的绝对值不超过1的条件，那么就不是平衡二叉树。下一步，自然就是分别对根节点的左右子树进行递归判断了，这样一直]]></description><category></category></item><item><title><![CDATA[剑指offer系列之37：二叉树的深度]]></title><link>https://blog.youkuaiyun.com/ly_main/article/details/51136450</link><guid>https://blog.youkuaiyun.com/ly_main/article/details/51136450</guid><author>ly_main</author><pubDate>Tue, 12 Apr 2016 19:40:42 +0800</pubDate><description><![CDATA[题目描述：输入一颗二叉树，求出该树的深度。（知识迁移能力）思路：如果一棵树只有一个节点，则其深度为1，如果根节点只有左子树而没有右子树，则树的深度应该是左子树的深度加1，如果根节点只有右子树而没有左子树，则树的深度应该是右子树的深度加1，如果既有左子树又有右子树，则深度应该是左右子树的深度的较大值加1.可以采用递归的方式实现。/**
public class TreeNode {
    int v]]></description><category></category></item></channel></rss>