<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[EverydayIsLife的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/EverydayIsLife</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; EverydayIsLife]]></copyright><item><title><![CDATA[判断二叉树是否AVL树]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/79595029</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/79595029</guid><author>EverydayIsLife</author><pubDate>Sat, 17 Mar 2018 19:54:19 +0800</pubDate><description><![CDATA[一、算法思想： 
        递归法判断一个二叉树是否平衡二叉树（AVL树），可以根据它的定义写出代码：（1）空树是一个AVL树；（2）只有一个根结点的树是一个AVL树；（2）左子树是一颗AVL树，且右子树是一个AVL树，且左子树的高度与右子树的高度差绝对值不超过1。

二、代码：



/*
name:
author:followStep
description:
date:2018/3/1...]]></description><category></category></item><item><title><![CDATA[Manacher算法求最长回文子串]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/79594976</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/79594976</guid><author>EverydayIsLife</author><pubDate>Sat, 17 Mar 2018 19:43:08 +0800</pubDate><description><![CDATA[一、算法思想： 
        常规方法求一个字符串的最大回文子串可以用一个两层循环实现，外循环i表示对称轴位置，内循环以i为对称轴向两边遍历检查元素是否相等。但是这样会有多余操作，以下图为例： 
 
（图片来源：https://segmentfault.com/a/1190000003914228） 
        假如外循环遍历到i位置，pos是之前遍历过的位置，且红色部分是以pos为对称...]]></description><category></category></item><item><title><![CDATA[重装windows后无法启动ubuntu解决办法]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/78975695</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/78975695</guid><author>EverydayIsLife</author><pubDate>Thu, 04 Jan 2018 21:35:44 +0800</pubDate><description><![CDATA[本文参考如下博客：http://blog.youkuaiyun.com/zl87758539/article/details/72983496



我之前装了双系统：win10+ubuntu，后来又重装了win10，结果ubuntu就打不开了，用了EasyBCD添加ubuntu引导项也不行，后来按以下方法成功解决了这个问题。

1、使用UltraISO+光盘/U盘制作ubuntu安装文件，不会的百度。 
2]]></description><category></category></item><item><title><![CDATA[PAT-AL 1039. Course List for Student]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77895499</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77895499</guid><author>EverydayIsLife</author><pubDate>Fri, 08 Sep 2017 15:37:49 +0800</pubDate><description><![CDATA[1、知识点：排序 
2、思路：定义course结构、student结构： 
struct course{ 
    int ind, stu_num;    //课程编号，选课学生数 
    char name_arr[MAXNI][STRLEN];    //学生姓名 
};struct student{ 
    int order;    //查询顺序 
    char name[STRL]]></description><category></category></item><item><title><![CDATA[URAL-1103. Pencils and Circles]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77888068</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77888068</guid><author>EverydayIsLife</author><pubDate>Thu, 07 Sep 2017 22:55:04 +0800</pubDate><description><![CDATA[1、知识点：三角形外接圆 
2、思路：外三层循环遍历组圆方式，内一层循环用于判断。重点在于计算外接圆中心坐标公式。先计算P1P2，P1P3的中垂线方程，然后联立求交点即可。/*用途：提交 
**版本：2
**说明：AC 
*/#include <stdio.h>
#include <math.h>
#define MAXN 5000
struct Point{
    double x;
    d]]></description><category></category></item><item><title><![CDATA[URAL-1101. Robot in the Field]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77887619</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77887619</guid><author>EverydayIsLife</author><pubDate>Thu, 07 Sep 2017 22:06:13 +0800</pubDate><description><![CDATA[1、知识点：动态规划 
2、思路：此题最大的难点恐怕还是表达式处理，我用的是栈，代码比较长，但注释比较详细。/*
*/#include <stdio.h>
#include <string.h>
#include <string>
#include <stack>
using namespace std;
#define MAXN 100+10                     //N,M,K]]></description><category></category></item><item><title><![CDATA[PAT-AL 1033. To Fill or Not to Fill]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77871200</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77871200</guid><author>EverydayIsLife</author><pubDate>Wed, 06 Sep 2017 20:44:13 +0800</pubDate><description><![CDATA[1、知识点：贪心 
2、思路：先将站按照距离从小到大排序。假设我有N个桶，第i号桶装第i站的汽油（i从0开始），第0站加满，到第i站时，选择从第i-1站到达此站最便宜的汽油（如果最便宜的不够用，选择次便宜的），然后将N个桶中所有比此站更贵的汽油原价卖出（说明之前买的多了，够用就好），然后加此站的油至加满（不管是不是比之前或后面的更贵，因为不加满怕到不了下个站）。最后到达终点时将所有剩下的油原价卖出即]]></description><category></category></item><item><title><![CDATA[PAT-AL 1025. PAT Ranking]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77851064</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77851064</guid><author>EverydayIsLife</author><pubDate>Tue, 05 Sep 2017 14:27:48 +0800</pubDate><description><![CDATA[1、知识点：排序 
2、思路：本题不难，可以只对全部成绩排序一次。用cur_fin_rank记录前一个总排名，cur_loc_rank记录前一个区域排名。这里需要注意，如果用qsort排序，不能用long long保存register_number，因为比较函数返回的是int类型，比较long long会出错，卡在这，最后一个测试点会过不去。/*用途：
**说明：
**算法：
*///#define]]></description><category></category></item><item><title><![CDATA[PAT-AL 1013. Battle Over Cities]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77839172</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77839172</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 16:47:26 +0800</pubDate><description><![CDATA[1、知识点：连通分量 
2、思路：并查集/*用途：
**说明：
**算法：并查集 
*///#define LOCAL
#include <cstdio>
#include <string.h>
using namespace std;
#define MAXN 1000+10
int N, M;
int pre[MAXN];
int block[MAXN];int find(int x);
voi]]></description><category></category></item><item><title><![CDATA[HDU-1232 畅通工程]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77838347</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77838347</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 15:53:25 +0800</pubDate><description><![CDATA[1、知识点：连通分量 
2、思路：并查集/*用途：
**说明：
**算法：并查集 
*///#define LOCAL
#include <cstdio>
#include <string.h>
using namespace std;
#define MAXN 1000+10
int N, M;
int pre[MAXN];
int block[MAXN];int find(int x);
voi]]></description><category></category></item><item><title><![CDATA[PAT-AL 1007. Maximum Subsequence Sum]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77837300</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77837300</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 14:40:56 +0800</pubDate><description><![CDATA[1、知识点：求最大连续子串和 
2、思路：用temp_sum保存子串和，如果temp_sum>=0，那么temp_sum+=arri；如果temp_sum<0,  temp_sum = arr[i]。判断temp_sum 是否大于sum（当前最大子串和）,如果是就更新sum。/*用途：
**说明：
**算法：
*///#define LOCAL
#include <cstdio>
using nam]]></description><category></category></item><item><title><![CDATA[PAT-AL 1022. Digital Library]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77834535</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77834535</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 10:51:56 +0800</pubDate><description><![CDATA[1、知识点：字符串比较、排序 
2、思路：题目要求结果按照图书编号顺序输出，因此要先将图书排序，然后将搜索词分类比较即可。注意：结构体可以直接赋值，无需重载赋值运算符。/*用途：
**说明：
**算法：
*///#define LOCAL
#include <vector>
#include <cstdio>
#include <string.h>
#include <algorithm>
usin]]></description><category></category></item><item><title><![CDATA[算法面试100题——8.逻辑思维题]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77834266</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77834266</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 10:33:40 +0800</pubDate><description><![CDATA[1、题目：有两个房间，一间房里有三盏灯，另一间房有控制着三盏灯的三个开关，这两个房间是 分割开的， 
从一间里不能看到另一间的情况。 
现在要求受训者分别进这两房间一次，然后判断出这三盏灯分别是由哪个开关控制的。 
有什么办法呢？ 
2、思路：我的办法是，先打开第一个开关，一段时间后把它关掉，在打开第二个开关，那么第二个房间里灯泡有点热的那盏灯对应第一个开关，正点亮的那盏灯对应第二个开关，剩下的那盏]]></description><category></category></item><item><title><![CDATA[算法面试100题——7.微软亚院之编程判断俩个链表是否相交]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77834086</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77834086</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 10:26:47 +0800</pubDate><description><![CDATA[1、题目：给出俩个单向链表的头指针，比如h1，h2，判断这俩个链表是否相交。 
为了简化问题，我们假设俩个链表均不带环。 
2、知识点：链表、排序 
3、思路：将指向结点的指针排序，排序后判断指针是否相交。排序复杂度为O（NlogN），判断相交的复杂度为O(M+N)。/*用途：
**说明：
**算法：复制结点指针，排序 
*///#define LOCAL
#include <cstdio>
#in]]></description><category></category></item><item><title><![CDATA[算法面试100题——4.在二元树中找出和为某一值的所有路径]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833799</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833799</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 10:13:34 +0800</pubDate><description><![CDATA[1、题目：输入一个整数和一棵二元树。 
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 
打印出和与输入整数相等的所有路径。 
例如 输入整数22和如下二元树 
  10 
  / \ 
  5 12 
  / \ 
  4 7 
则打印出两条路径：10, 12和10, 5, 7。二元树节点的数据结构定义为：struct BinaryTreeNode // a node in t]]></description><category></category></item><item><title><![CDATA[算法面试100题——2.设计包含min函数的栈]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833657</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833657</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 10:06:37 +0800</pubDate><description><![CDATA[1、题目：定义栈的数据结构，要求添加一个min函数，能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。/*用途：
**说明：mstack.h头文件
**算法：
*/#ifndef MSTACK_H
#define MSTACK_H#include <cstdio>
#include <limits.h>
using namespace std;
#define MAX]]></description><category></category></item><item><title><![CDATA[算法面试100题——1、把二元查找树转变成排序的双向链表]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833581</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833581</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 10:00:56 +0800</pubDate><description><![CDATA[题目： 
输入一棵二元查找树，将该二元查找树转换成一个排序的双向链表。 
要求不能创建任何新的结点，只调整指针的指向。10 
  / \ 
 6  14 
 / \ / \ 
4 8 12 16转换成双向链表 
4=6=8=10=12=14=16。首先我们定义的二元查找树 节点的数据结构如下： 
 struct BSTreeNode 
{ 
  int m_nValue; // value of n]]></description><category></category></item><item><title><![CDATA[URAL-1451. Beerhouse Tale]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833305</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833305</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 09:35:31 +0800</pubDate><description><![CDATA[1、知识点：费马点 
2、思路：下面是百度百科对费马点的解释，也是解题思路： 
① 若三角形3个内角均小于120°，那么3条距离连线正好三等分费马点所在的周角，即该点所对三角形三边的张角相等，均为120°。所以三角形的费马点也称为三角形的等角中心。 
（托里拆利的解法中对这个点的描述是：对于每一个角都小于120°的三角形ABC的每一条边为底边，向外作正三角形，然后作这三个正三角形的外接圆。托里拆利指]]></description><category></category></item><item><title><![CDATA[PAT-TL 1010. Lehmer Code]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833046</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77833046</guid><author>EverydayIsLife</author><pubDate>Mon, 04 Sep 2017 09:06:28 +0800</pubDate><description><![CDATA[1、知识点：逆序数、树状数组 
2、思路：由于题目没有说明数据的范围，因此应该用数据离散化，用树状数组求和即可。/*用途：
**说明：
**算法：
*///#define LOCAL
#include <cstdio>
#include <string.h>
#include <stack>
#include <algorithm>
using namespace std;
#define MAXN]]></description><category></category></item><item><title><![CDATA[PAT-TL 1009. Triple Inversions]]></title><link>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77824593</link><guid>https://blog.youkuaiyun.com/EverydayIsLife/article/details/77824593</guid><author>EverydayIsLife</author><pubDate>Sun, 03 Sep 2017 19:07:46 +0800</pubDate><description><![CDATA[1、知识点：逆序数 
2、思路：求中间节点arr[i]前面比它大的数left_big_num[i]，后面比它小的数right_small_num[i]，答案就是left_big_num[i]*right_small_num[i], i从2到n-1。用树状数组计算left_big_num[i]，right_small_num[i]可以用一个小技巧间接求得。看了网上几篇博文，发现大部分人用排序离散化，其]]></description><category></category></item></channel></rss>