<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Yaphat的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Yaphat</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Yaphat]]></copyright><item><title><![CDATA[二叉树最大路径和]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77836513</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77836513</guid><author>Yaphat</author><pubDate>Mon, 04 Sep 2017 13:32:58 +0800</pubDate><description><![CDATA[题目描述给出一棵二叉树，寻找一条路径使其路径和最大，路径可以在任一节点中开始和结束（路径和为两个节点之间所在路径上的节点权值之和）思路首先我们分析一下对于指定某个节点为根时，最大的路径和有可能是哪些情况。第一种是左子树的路径加上当前节点，第二种是右子树的路径加上当前节点，第三种是左右子树的路径加上当前节点（相当于一条横跨当前节点的路径），第四种是只有自己的路径。乍一看似乎以此为条件进行自下而上递归就]]></description><category></category></item><item><title><![CDATA[二叉树中和为某值的路径]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77823619</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77823619</guid><author>Yaphat</author><pubDate>Sun, 03 Sep 2017 17:06:35 +0800</pubDate><description><![CDATA[题目描述输入一颗二叉树和一个整数，打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路这道题有好几个需要注意的细节。public class Solution {
    ArrayList<ArrayList<Integer>> listall=new ArrayList<ArrayList<Integer>>();
    Arr]]></description><category></category></item><item><title><![CDATA[二叉树序列化和反序列化]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77776308</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77776308</guid><author>Yaphat</author><pubDate>Fri, 01 Sep 2017 18:32:36 +0800</pubDate><description><![CDATA[题目描述请实现两个函数，分别用来序列化和反序列化二叉树实现public class Solution {
    String Serialize(TreeNode root) {
        StringBuffer sb=new StringBuffer();
        if(root==null){
            sb.append("#,");
            r]]></description><category></category></item><item><title><![CDATA[二叉搜索树转为双向链表]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77775506</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77775506</guid><author>Yaphat</author><pubDate>Fri, 01 Sep 2017 17:26:20 +0800</pubDate><description><![CDATA[题目描述输入一棵二叉搜索树，将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点，只能调整树中结点指针的指向。实现中序遍历二叉搜索树就可以，需要记录节点的前一个指针。同时需要标记下是否是双向链表的头节点public TreeNode Convert(TreeNode root) {
        Stack<TreeNode> stack=new Stack<TreeNode>();]]></description><category></category></item><item><title><![CDATA[二叉树]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77774199</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77774199</guid><author>Yaphat</author><pubDate>Fri, 01 Sep 2017 16:02:48 +0800</pubDate><description><![CDATA[二叉树的常见操作import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;import javax.swing.LayoutStyle;
import  java.util.ArrayList;
class TreeNode {
    int val;
    TreeNode left;
    Tre]]></description><category></category></item><item><title><![CDATA[螺旋矩阵顺时针打印]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77774021</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77774021</guid><author>Yaphat</author><pubDate>Fri, 01 Sep 2017 15:49:21 +0800</pubDate><description><![CDATA[问题描述输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字，例如，如果输入如下矩阵： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解法需要注意四个边界。import java.util.ArrayList;
public class Solution {]]></description><category></category></item><item><title><![CDATA[最大下标距离]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77773766</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77773766</guid><author>Yaphat</author><pubDate>Fri, 01 Sep 2017 15:34:12 +0800</pubDate><description><![CDATA[题目描述给定一个整形数组，找出最大下标距离j−i, 当且A[i]解法public static int maxindexdistance(int A[]) {
        boolean[] isDes = new boolean[A.length];
        int min = A[0];
        isDes[0] = true;
        for (int i = 0;]]></description><category></category></item><item><title><![CDATA[两数之和]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77770528</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77770528</guid><author>Yaphat</author><pubDate>Fri, 01 Sep 2017 11:03:19 +0800</pubDate><description><![CDATA[题目描述给定一个整型数组，找出其中的两个数使其和为某个指定的数，并返回两个数的下标。思路这里其实要考虑数组可能出现相同值的情况。public int[] twoSum(int[] nums, int target) {
        int[] result=new int[2];
        Map<Integer,Integer> map=new HashMap<Integer,Integ]]></description><category></category></item><item><title><![CDATA[数组奇偶划分]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77648945</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77648945</guid><author>Yaphat</author><pubDate>Mon, 28 Aug 2017 15:06:42 +0800</pubDate><description><![CDATA[题目描述输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有的奇数位于数组的前半部分，所有的偶数位于位于数组的后半部分。情况一不需要保证奇数和偶数之间相对位置不变。 
这里可以用快排的思想。时间复杂度为O（n）public static int[] reOrderArray(int[] array) {
        int left = 0;
        int right =]]></description><category></category></item><item><title><![CDATA[数组中出现次数超过一半的数字]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77648506</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77648506</guid><author>Yaphat</author><pubDate>Mon, 28 Aug 2017 14:36:58 +0800</pubDate><description><![CDATA[问题描述数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。如果不存在则输出0。思路一最容易想到的思路就是对数据排序，那么中间的数字就是要求的数字。时间复杂度就是排序的复杂度思路二下面说一下复杂度是O(n)的解法 
如果有符合条件的数字，则它出现的次数比其他所有数]]></description><category></category></item><item><title><![CDATA[重建二叉树]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77574262</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77574262</guid><author>Yaphat</author><pubDate>Fri, 25 Aug 2017 15:03:17 +0800</pubDate><description><![CDATA[问题描述输入某二叉树的前序遍历和中序遍历的结果，请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}，则重建二叉树并返回。思路这道题还是有点绕的，尤其是索引值的确定，多想想吧。 
递归思想，每次将左右两颗子树当成新的子树进行处理，中序的左右子树索引很好找，前序的开始结束索引通过计]]></description><category></category></item><item><title><![CDATA[搜索排序数组]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77532813</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77532813</guid><author>Yaphat</author><pubDate>Thu, 24 Aug 2017 17:17:30 +0800</pubDate><description><![CDATA[问题描述假设有一个排序的按未知的旋转轴旋转的数组(比如，0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2)。给定一个目标值进行搜索，如果在数组中找到目标值返回数组中的索引位置，否则返回-1。解决对于这种部分有序的数组都可以使用二分法    public int search(int[] A, int target) {
        int low=0;
        int hi]]></description><category></category></item><item><title><![CDATA[翻转链表]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77509564</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77509564</guid><author>Yaphat</author><pubDate>Wed, 23 Aug 2017 18:45:12 +0800</pubDate><description><![CDATA[翻转链表的两种情况翻转单链表很简单public ListNode reverseList(ListNode head) {
        ListNode tmp=null;
        ListNode dummy=new ListNode(0);
        dummy.next=null;
        while(head!=null){
            tmp=head]]></description><category></category></item><item><title><![CDATA[最大公共子串&&最大公共子序列]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77371811</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77371811</guid><author>Yaphat</author><pubDate>Fri, 18 Aug 2017 16:32:13 +0800</pubDate><description><![CDATA[问题描述最大公共子序列给出两个字符串，找到最长公共子序列(LCS)，返回LCS的长度。 
状态转移方程为：如果A[i]=A[j],则dp[i][j]=dp[i-1][j-1]+1，如果不等，则dp[i][j]=Math.max(dp[i][j-1],dp[i-1][j])public class Solution {
    /**
     * @param A, B: Two strings.]]></description><category></category></item><item><title><![CDATA[最长上升子序列]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77371687</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77371687</guid><author>Yaphat</author><pubDate>Fri, 18 Aug 2017 16:24:38 +0800</pubDate><description><![CDATA[问题描述给定一个整数序列，找到最长上升子序列（LIS），返回LIS的长度。public class Solution {
    /**
     * @param nums: The integer array
     * @return: The length of LIS (longest increasing subsequence)
     */
    public int long]]></description><category></category></item><item><title><![CDATA[寻找旋转排序数组中的最小值]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/77371106</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/77371106</guid><author>Yaphat</author><pubDate>Fri, 18 Aug 2017 15:53:44 +0800</pubDate><description><![CDATA[问题描述假设一个旋转排序的数组其起始位置是未知的（比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2）。 
你需要找到其中最小的元素。没有重复值public class Solution {
    /**
     * @param nums: a rotated sorted array
     * @return: the minimum number in the arr]]></description><category></category></item><item><title><![CDATA[推荐算法的优缺点]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/72925743</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/72925743</guid><author>Yaphat</author><pubDate>Thu, 08 Jun 2017 16:41:39 +0800</pubDate><description><![CDATA[基于领域的协同过滤基于矩阵分解矩阵分解方法将高维User-Item评分矩阵映射为两个低维用户和物品矩阵，解决了数据稀疏性问题。优点： 
预测精度较高 
缺点： 
1、模型训练比较费时。 
2、不具有很好的可解释性。分解出来的用户和物品矩阵的每个维度 无法和现实生活中的概念来解释，无法用现实概念给每个维度命名，只能理解为潜在语义空间待填]]></description><category></category></item><item><title><![CDATA[链表去重]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/70738676</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/70738676</guid><author>Yaphat</author><pubDate>Tue, 25 Apr 2017 13:59:02 +0800</pubDate><description><![CDATA[题目在一个排序的链表中，存在重复的结点，请删除该链表中重复的结点，重复的结点不保留，返回链表头指针。 例如，链表1->2->3->3->4->4->5 处理后为 1->2->5思路1、链表头可能被删除，在前面再加一个head节点， 
2、如果当前元素没有重复的，则加入列表中 
3、如何判断当前元素有没有重复，使用一个指针记录当前元素第一次出现的节点，然后第二个指针遍历具有相同元素的节点，便利完之后，]]></description><category></category></item><item><title><![CDATA[特征冗余]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/70659376</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/70659376</guid><author>Yaphat</author><pubDate>Mon, 24 Apr 2017 20:33:17 +0800</pubDate><description><![CDATA[刻画特征之间相似性的几种方法： 
1、对称不确定性（SU）：取值在（0，1）之间，值越大，X，Y之间相关性越大，当取值为0，表示X,Y之间相互独立，反之，代表之间具有强依赖性，意味着当知道其中一个变量就可以推测出另一个变量。∑i=0ni2=(n2+n)(2n+1)6\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}可以分为C-相关和F-相关，任何一个特征f和类别C之]]></description><category></category></item><item><title><![CDATA[Top K]]></title><link>https://blog.youkuaiyun.com/Yaphat/article/details/70575212</link><guid>https://blog.youkuaiyun.com/Yaphat/article/details/70575212</guid><author>Yaphat</author><pubDate>Mon, 24 Apr 2017 11:06:03 +0800</pubDate><description><![CDATA[问题描述：在一维数组中找到第K大的数。 
比如说: 
数组[3,2,1,5,6,4]  k = 2, 返回 5.解法一：最容易想到的就是排序整个数组。可以用快速排序的方法。public int findKthLargest(int[] nums, int k) {
        final int N = nums.length;
        Arrays.sort(nums);]]></description><category></category></item></channel></rss>