<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Yenpo Ma的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/mabozi08</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mabozi08]]></copyright><item><title><![CDATA[leetcode刷题]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/119988821</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/119988821</guid><author>mabozi08</author><pubDate>Mon, 30 Aug 2021 01:45:59 +0800</pubDate><description><![CDATA[记录贴，只为了统一完美格式

文章目录1-101.两数之和2.两数相加

1-10
1.两数之和
解法：hash表
class Solution {
public:
    vector&lt;int&gt; twoSum(vector&lt;int&gt; &amp;nums, int &amp;target) {
        unordered_map&lt;int,int&gt; hashtabel;
        for (int i = 0; i &lt; nums.size(); ++i)]]></description><category></category></item><item><title><![CDATA[leetcode 专题：树 python 版（持续更新中）]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/89117251</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/89117251</guid><author>mabozi08</author><pubDate>Tue, 09 Apr 2019 01:21:17 +0800</pubDate><description><![CDATA[目录

二叉树的基础知识：

二叉树的遍历：

二叉搜索树：

堆：

红黑树：

Leetcode

100 相同的树

101 对称二叉树

104 二叉树的最大深度

107 二叉树的层次遍历 ||

108 将有序数组转换为二叉搜索树

110 平衡二叉树

111 二叉树的最小深度

112 路径总和

226 翻转二叉树

235 二叉搜索树的最近公共祖先

257 二叉树的所有路径
...]]></description><category></category></item><item><title><![CDATA[leetcode 专题：排序 python 版（持续更新中）]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/89057801</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/89057801</guid><author>mabozi08</author><pubDate>Mon, 08 Apr 2019 04:01:17 +0800</pubDate><description><![CDATA[目录

常见的排序算法：

1. 冒泡排序

2. 选择排序

3. 插入排序

4. 桶排序

5. 快速排序

6. 归并排序

7. 堆排序

Leetcode

242 有效的字母异位词

349 两个数组的交集

350 两个数组的交集 ||

922 按奇偶排序数组 ||

976 三角形的最大周长

目录

常见的排序算法：

1. 冒泡排序

2. 选择排序

3. 插入排序

4...]]></description><category></category></item><item><title><![CDATA[leetcode 专题：贪心算法 python 版（持续更新中）]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/89051031</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/89051031</guid><author>mabozi08</author><pubDate>Sat, 06 Apr 2019 17:01:04 +0800</pubDate><description><![CDATA[贪心算法和动态规划：

相同点：都是一种递推算法 即均由局部最优解来推导全局最优解

不同点：

贪心算法：每一步的最优解一定包含上一步的最优解，上一步之前的最优解则不作保留，换句话说就是一开始就定好了最优策略

动态规划：记录之前的所有的局部最优解，可以列出递归公式。代码非常套路，一般都是设一个二维数组或者一维数组记录中间结果。



目录

122 买卖股票的最佳时机||

455 分发饼...]]></description><category></category></item><item><title><![CDATA[leetcode 专题：动态规划 python 版（持续更新中）]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/89035938</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/89035938</guid><author>mabozi08</author><pubDate>Fri, 05 Apr 2019 01:16:30 +0800</pubDate><description><![CDATA[递归：自己调用自己。代码比较简洁，但是浪费空间，有许多重复计算。

迭代：利用已知的变量值，根据递推公式不断得到新的值，一直到解决问题为止。代码相对复杂一点。

递归中一定有迭代，但是迭代中不一定有递归，大部分可以相互转换。能用迭代的不用递归，递归调用函数，浪费空间，并且递归太深容易造成堆栈的溢出。

动态规划：通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。通常许多子问题非常相似，...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题66 python版+解析：构建乘积数组]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88997954</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88997954</guid><author>mabozi08</author><pubDate>Wed, 03 Apr 2019 16:48:49 +0800</pubDate><description><![CDATA[题目描述

给定一个数组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]。不能使用除法。




# -*- coding:utf-8 -*-
class Solution:
    def multiply(self, A):
        # write code ...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题65 python版+解析：不用加减乘除做加法]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88997536</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88997536</guid><author>mabozi08</author><pubDate>Wed, 03 Apr 2019 15:57:43 +0800</pubDate><description><![CDATA[题目描述

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



思路：转换成二进制

1. 不考虑进位对每一位相加，与异或的结果一样。

2. 考虑进位，两个数先做与运算，然后再左移一位。

3. 把前两个结果相加。


# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
 ...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题64 python版+解析：求1+2+...+n]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88997274</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88997274</guid><author>mabozi08</author><pubDate>Wed, 03 Apr 2019 15:45:21 +0800</pubDate><description><![CDATA[题目描述

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




# -*- coding:utf-8 -*-
class Solution:
    def Sum_Solution(self, n):
        # write code here
        return n a...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题63 python版+解析：股票的最大利润]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88995635</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88995635</guid><author>mabozi08</author><pubDate>Wed, 03 Apr 2019 15:13:46 +0800</pubDate><description><![CDATA[给定一个数组，它的第i个元素是一支给定股票第i天的价格。

如果你最多只允许完成一笔交易（即买入和卖出一支股票），设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:


输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。
  ...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题62 python版+解析：圆圈中最后剩下的数字]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88984751</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88984751</guid><author>mabozi08</author><pubDate>Wed, 03 Apr 2019 00:44:48 +0800</pubDate><description><![CDATA[题目描述

每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去.....]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题61 python版+解析：扑克牌中的顺子]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88976144</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88976144</guid><author>mabozi08</author><pubDate>Tue, 02 Apr 2019 17:16:51 +0800</pubDate><description><![CDATA[题目描述

LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿！！“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题60  python版+解析：n个骰子的点数]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88960673</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88960673</guid><author>mabozi08</author><pubDate>Tue, 02 Apr 2019 00:48:24 +0800</pubDate><description><![CDATA[题目描述：

把n个骰子扔在地上，所有骰子朝上一面的点数之和为s。输入n，打印出s的所有可能的值的出现概率。

思路：定义两个数组。数组的长度为6*n,即可能出现的最大和。数组每个元素的值代表出现的次数，比如probability[5]表示点数和为5出现的次数。在一轮循环中，一个数组记录之前一次所有出现的情况，一个数组记录这一次的所有出现的情况。例如这一次出现和为n的次数，应该等于另一个数组里记录...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题59 python版+解析：滑动窗口的最大值， 队列的最大值]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88959446</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88959446</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 23:28:33 +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,...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题58 python版+解析：翻转单词顺序，左旋转字符串]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88957955</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88957955</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 22:42:26 +0800</pubDate><description><![CDATA[题目描述

牛客最近来了一个新员工Fish，每天早晨总是会拿着一本英文杂志，写些句子在本子上。同事Cat对Fish写的内容颇感兴趣，有一天他向Fish借来翻看，但却读不懂它的意思。例如，“student. a am I”。后来才意识到，这家伙原来把句子单词的顺序翻转了，正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行，你能帮助他么？

思路：直接用封装好的...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题57 python版+解析：和为s的两个数字，和为s的连续正数序列]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88957275</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88957275</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 21:33:05 +0800</pubDate><description><![CDATA[输入一个递增排序的数组和一个数字S，在数组中查找两个数，使得他们的和正好是S，如果有多对数字的和等于S，输出两个数的乘积最小的。

输出描述:


对应每个测试案例，输出两个数，小的先输出。

思路：首先选择数组中的第一个数字和最后一个数字，如果它们的和小于s，第一个索引就往右一格，如果它们的和大于s，第二个索引就往左一格。时间复杂度为O(n）


# -*- coding:utf-8 -*-
c...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题56 python版+解析：数组中只出现一次的两个数字，数组中唯一只出现一次的数字]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88952073</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88952073</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 21:01:40 +0800</pubDate><description><![CDATA[题目描述

一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。



思路：

1. 从头到尾依次异或数组中的每个数字，找到结果数字中第一个为1的位置，记为第n位。

2.以第n位是不是1为标准把原数组中的数字分成两个数组，第一个子数组中每个数字的第n位都是1，第二个子数组中每个数字的第n位都是0。这样每个子数组包含一个只出现一次的数字，而其他数字都成对...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题55 python版+解析：二叉树的深度，平衡二叉树]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88949819</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88949819</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 16:05:16 +0800</pubDate><description><![CDATA[题目描述

输入一棵二叉树，求该树的深度。从根结点到叶结点依次经过的结点（含根、叶结点）形成树的一条路径，最长路径的长度为树的深度。

思路：

1. 树只有一个节点，则深度为1

2. 根节点只有左子树没有右子树，树的深度为左子树深度加1

3.根节点只有右子树没有左子树，树的深度为右子树深度加1

4.根节点既有右子树又有左子树，树的深度为左、右子树深度的较大值加1

用递归来实现


# -...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题54 python版+解析：二叉搜索树的第K大节点]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88949227</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88949227</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 15:43:41 +0800</pubDate><description><![CDATA[题目描述

给定一棵二叉搜索树，请找出其中的第k小的结点。例如， （5，3，7，2，4，6，8）  中，按结点数值大小顺序第三小结点的值为4。

思路：中序遍历


# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = ...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题53 python版+解析：数字在排序数组中出现的次数， 0~n-1中缺失的数字]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88948042</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88948042</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 15:20:32 +0800</pubDate><description><![CDATA[题目描述

统计一个数字在排序数组中出现的次数。

思路：二分法查找第一个出现的位置，和最后一次出现的位置。


# -*- coding:utf-8 -*-
class Solution:
    def GetNumberOfK(self, data, k):
        # write code here
        number = 0
        if data:
     ...]]></description><category></category></item><item><title><![CDATA[剑指offer 面试题52 python版+解析：两个链表的第一个公共节点]]></title><link>https://blog.youkuaiyun.com/mabozi08/article/details/88939267</link><guid>https://blog.youkuaiyun.com/mabozi08/article/details/88939267</guid><author>mabozi08</author><pubDate>Mon, 01 Apr 2019 01:42:35 +0800</pubDate><description><![CDATA[题目描述

输入两个链表，找出它们的第一个公共结点。



思路：首先得到两个列表的长度，现在较长的列表上走若干步，然后同时在两个链表上遍历，找到的第一个公共节点就是它们的第一个公共节点。




# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#     ...]]></description><category></category></item></channel></rss>