<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Yangbos_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Yangbos_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Yangbos_]]></copyright><item><title><![CDATA[一战北邮计专考研经验分享]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/124120204</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/124120204</guid><author>Yangbos_</author><pubDate>Tue, 12 Apr 2022 11:38:54 +0800</pubDate><description><![CDATA[一战北邮计专考研经验分享
具体情况因人而异，本篇只是分享我的经验和安排。
时间轴
3-6月：主要看数学，如果专业课是408或912也要提前开始准备，辅助英语单词。时间分配大概是5.5：3.5：1。
7月   ：一般会有小学期或者实习课，个人建议如果确定要考研而不是工作，可以适当水一下。这段时间要开始调整作息和状态，准备渐     渐进入考研模式。
8-9月：很关键，至少结束数学的强化课。专业课多的话，至少一轮要完成（or75%），英语阅读真题开刷。
10月：开始政治，直接看强化课。英语大小作文开始。数学开真]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day27]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/123291578</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/123291578</guid><author>Yangbos_</author><pubDate>Sat, 05 Mar 2022 11:08:17 +0800</pubDate><description><![CDATA[搜索与回溯算法（困难）
Q1  序列化二叉树
请实现两个函数，分别用来序列化和反序列化二叉树。
你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑，你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
提示：输入输出格式与 LeetCode 目前使用的方式一致，详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式，你也可以采用其他的方法解决这个问题。
主要思路：利用队列实现层序遍历，注意节点间的划分和空结点的处]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day26]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/123249155</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/123249155</guid><author>Yangbos_</author><pubDate>Thu, 03 Mar 2022 11:12:55 +0800</pubDate><description><![CDATA[栈与队列 （困难）
Q1  I. 滑动窗口的最大值
给定一个数组 nums 和滑动窗口的大小 k，请找出所有滑动窗口里的最大值。
思路：
本题的关键是如何计算每次窗口右移后的最大值。如果每次都通过遍历获取，那么总时间复杂度O（n* k ）当n与k相近时达到n^2；因此我们需要找到使计算窗口最大值时间复杂度更低的方法。
我们在窗口右移同时维护一个单调队列，队列内次序从大到小。
每当窗口右移时：


先判断此时最大元素是否是最右侧的元素，若是，则需要pop_front从队首出队


在新元素入队前，先使队列内小]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day25]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/123226561</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/123226561</guid><author>Yangbos_</author><pubDate>Wed, 02 Mar 2022 11:44:58 +0800</pubDate><description><![CDATA[字符串 （medium）
Q1 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值（包括整数和小数）。
数值（按顺序）可以分成以下几个部分：

若干空格
一个 小数 或者 整数
（可选）一个 ‘e’ 或 ‘E’ ，后面跟着一个 整数
若干空格

小数（按顺序）可以分成以下几个部分：


（可选）一个符号字符（’+’ 或 ‘-’）


下述格式之一：

至少一位数字，后面跟着一个点 ‘.’
至少一位数字，后面跟着一个点 ‘.’ ，后面再跟着至少一位数字
一个点 ‘.’ ，后面跟着至少一位数字



整]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day24]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/123201084</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/123201084</guid><author>Yangbos_</author><pubDate>Tue, 01 Mar 2022 11:03:19 +0800</pubDate><description><![CDATA[数学 II（medium）
Q1 顺时针打印矩阵
输入一个矩阵，按照从外向里以顺时针的顺序依次打印出每一个数字。

思路一：设置方向的搜索

缺点：需要额外的二维数组标记搜索过的位置。
解决方法：设置边界变量，每次搜索完一行或一列时，缩小边界，依次约束搜索方向
class Solution {
public:
    vector&lt;int&gt; spiralOrder(vector&lt;vector&lt;int&gt;&gt;&amp; matrix) {

        vector&lt;]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day23]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/123177749</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/123177749</guid><author>Yangbos_</author><pubDate>Mon, 28 Feb 2022 10:55:42 +0800</pubDate><description><![CDATA[数学 （medium）
Q1  I. 剪绳子
给你一根长度为 n 的绳子，请把绳子剪成整数长度的 m 段（m、n都是整数，n&gt;1并且m&gt;1），每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少？例如，当绳子的长度是8时，我们把它剪成长度分别为2、3、3的三段，此时得到的最大乘积是18。
方法一：数学方法
根据数学推论（能推导出来），将n划分成差不多大小的数组分段时乘积最大。根据对方程（n / x）^x 求导可以得出 x = e 时]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day22]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/123147767</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/123147767</guid><author>Yangbos_</author><pubDate>Sat, 26 Feb 2022 11:54:36 +0800</pubDate><description><![CDATA[数学（simple）
Q1 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
你可以假设数组是非空的，并且给定的数组总是存在多数元素。


思路一：哈希表，遍历，存储每个数出现的次数。


思路二：排序，所求数一定位于中位数的位置


class Solution {
public:
    int majorityElement(vector&lt;int&gt;&amp; nums) {

        int len = nums.size();
    ]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day21]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/123139542</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/123139542</guid><author>Yangbos_</author><pubDate>Fri, 25 Feb 2022 19:21:03 +0800</pubDate><description><![CDATA[位运算
Q1 二进制中1的个数
编写一个函数，输入是一个无符号整数（以二进制串的形式），返回其二进制表达式中数字位数为 ‘1’ 的个数（也被称为 汉明重量).）。
class Solution {
public:
    int hammingWeight(uint32_t n) {
        
        int counts = 0;
        while (n) {         
            if (n &amp; 1) ++counts;  
            ]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day20]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122945659</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122945659</guid><author>Yangbos_</author><pubDate>Tue, 15 Feb 2022 15:25:49 +0800</pubDate><description><![CDATA[分治
Q 1 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果，请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
思路：

主体思路是先序遍历确定根节点位置，再根据根节点和中序划分左右子树
需要使用哈希表建立节点值——&gt;中序遍历节点位置的映射，为了更方便找到左右子树的分界
注意右子树左边界的取值

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *  ]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day19]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122919203</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122919203</guid><author>Yangbos_</author><pubDate>Mon, 14 Feb 2022 10:19:30 +0800</pubDate><description><![CDATA[搜索与回溯算法（中等）
第一题略，太简单。
Q2 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为：“对于有根树 T 的两个结点 p、q，最近公共祖先表示为一个结点 x，满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。
思路：
主要利用二叉搜索树的性质，来设计搜索路径。公共祖先的数值应介于两结点数值之间。
/**
 * Definition for a binary tree node.
 * stru]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day18]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122858064</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122858064</guid><author>Yangbos_</author><pubDate>Thu, 10 Feb 2022 12:06:31 +0800</pubDate><description><![CDATA[搜索与回溯算法（中等）
Q1  二叉树的深度
简单的二叉树递归问题：
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root == nullptr) return 0;
        else
          return 1 + max(maxDepth(root-&gt;left),maxDepth(root-&gt;right));
    }
};

Q2 平衡二叉树
输入一棵二叉树的根节点，判断该]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day17]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122848404</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122848404</guid><author>Yangbos_</author><pubDate>Wed, 09 Feb 2022 19:35:27 +0800</pubDate><description><![CDATA[排序（中级）
Q1 最小的k个数
感觉比较快的两个思路：

快速排序： 已知快排每一次调用Partition函数会将数列划分为大于小于基准数的两个序列，则我们可以在快排某次调用Partition函数时判断是否是K+1的位置，若是则停止，此时前k个为最小k个数
推排序，小根堆，每次取top，然后与堆底交换，调整。但是手撕堆排序最好从a[1]开始存数，因为此时2 * i  和  2 * i + 1（不越界）正好为孩子节点

class Solution {
public:
    vector&lt;int&g]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录 Day_16]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122830986</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122830986</guid><author>Yangbos_</author><pubDate>Tue, 08 Feb 2022 20:46:09 +0800</pubDate><description><![CDATA[Day 16 排序（初级）
Q1  把数组排成最小的数
输入一个非负整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
解题思路：本质是排序，但判断大小不能简单地看数值大小，而是要看两个数字组合的不同顺序所构成数的大小
class Solution {
public:
    string minNumber(vector&lt;int&gt;&amp; nums) {
        vector&lt;string&gt; strs;
        for(int i ]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录 Day_15]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122811698</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122811698</guid><author>Yangbos_</author><pubDate>Mon, 07 Feb 2022 17:10:13 +0800</pubDate><description><![CDATA[回溯与搜索（中等）
Q 1 二叉树中和为某一值的路径
给你二叉树的根节点 root 和一个整数目标和 targetSum ，找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
解题思路：

先序遍历：按照先序遍历顺序搜索某二叉树时，根节点到某一叶节点的路径就在遍历数列中。
DFS：深度优先搜索，搜索到叶结点时，若路径总和等于目标值，记录该路径；否则回溯，搜索其他可能路径

/**
 * Definition for a binary tree node.
 * s]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day14]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122788676</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122788676</guid><author>Yangbos_</author><pubDate>Sat, 05 Feb 2022 10:54:53 +0800</pubDate><description><![CDATA[搜索与回溯（中等）
Q1 矩阵中的路径
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中，返回 true ；否则，返回 false 。
单词必须按照字母顺序，通过相邻的单元格内的字母构成，其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。


解题思路：DFS + 剪枝

DFS：通过递归，先朝一个方向搜到底，再回溯至上个节点，沿另一个方向搜索，以此类推。
剪枝： 遇到能提前判断不可能匹配成功时，将停止搜索该分]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day13]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122788668</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122788668</guid><author>Yangbos_</author><pubDate>Sat, 05 Feb 2022 10:53:47 +0800</pubDate><description><![CDATA[双指针（简单）
Q1 调整数组顺序使奇数位于偶数前面
有点像
class Solution {
public:
    vector&lt;int&gt; exchange(vector&lt;int&gt;&amp; nums) {

        int n = nums.size();
        int i=0,j=n-1;

        while(i&lt;j)
        {
            while(i&lt;n &amp;&amp; nums[i]%2!=0) i+]]></description><category></category></item><item><title><![CDATA[剑指offer刷题记录_Day12]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122774402</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122774402</guid><author>Yangbos_</author><pubDate>Thu, 03 Feb 2022 10:26:06 +0800</pubDate><description><![CDATA[Day12 双指针（简单）
Q1  合并两个排序的链表
输入两个递增排序的链表，合并这两个链表并使新链表中的节点仍然是递增排序的。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    Li]]></description><category></category></item><item><title><![CDATA[剑指offer刷题记录_Day11]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122764231</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122764231</guid><author>Yangbos_</author><pubDate>Tue, 01 Feb 2022 15:14:53 +0800</pubDate><description><![CDATA[Day 11 双指针（简单）
Q1   删除链表的节点
给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。返回删除后的链表的头节点。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
publ]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day10]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122753803</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122753803</guid><author>Yangbos_</author><pubDate>Sun, 30 Jan 2022 16:28:15 +0800</pubDate><description><![CDATA[动态规划（中等）
Q1把数字翻译成字符串
给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。
我的第一思路是利用递归思想，将问题根据数字数组的长度和前两个数字来划分成子问题：

当长度为0或者1时，递归函数直接返回1，因为此时不会有多余情况了
当长度大于2时，要根据前两位数进行划分：

若第一个数字为0或者二位数大于25，则此时只]]></description><category></category></item><item><title><![CDATA[剑指Offer刷题记录_Day9]]></title><link>https://blog.youkuaiyun.com/Yangbos_/article/details/122730672</link><guid>https://blog.youkuaiyun.com/Yangbos_/article/details/122730672</guid><author>Yangbos_</author><pubDate>Fri, 28 Jan 2022 14:13:52 +0800</pubDate><description><![CDATA[动态规划（中等）
Q1 连续子数组的最大和
输入一个整型数组，数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。
动态规划一道经典的题目，首先我个人理解，动态规划实际上用dp数组保存了中间的一些计算量，避免重复计算提高效率，通过递推关系式得出最终解。最重要的就是分析出递推关系式。
我们可以从最简单的方法出发，用双重循环暴力求解每一段sum（i，j）然后比较，这种方法显然达不到O（n）；但是如果我们计算的是以 j 为结尾的最大连续子数组dp[]，最后在n个数据里找到]]></description><category></category></item></channel></rss>