自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冰殇的博客

「Talk is cheap. Show me the code」

  • 博客(194)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 递归与动态规划---最长递增子序列问题

问题:   给定数组arr,返回arr的最长递增子序列基本思路: 首先介绍时间复杂度为O(N^2)的方法。具体过程如下:生成长度为N(arr的长度)的数组dp,dp[i]表示在以arr[i]结尾的情况下,arr[0…i]中的最长子序列。dp[0]表示以arr[0]结尾的情况下最长子序列,只有它自己,设为1对于dp的其他位置,从左到右依次遍历,假设遍历到i,首先在arr[0…i-1]中找到比

2017-08-13 00:03:45 4746

原创 递归与动态规划---换钱的方法数

问题:   给定数组arr,arr中所有的值都为整数且不重复。每个值代表一种面值的货币,每种货币有无数张,再给定一个整数aim代表要找的钱数,求换钱的方法有多少种。 基本思路:   这道题的经典之处在于它可以体现暴力递归、记忆搜索、动态规划之间的关系,并可以在动态规划的基础上再进行一次优化。 首先介绍暴力递归的方法。如果arr = [5, 10, 25, 1],aim = 1000,分析过程如

2017-08-12 16:55:35 1900

原创 递归与动态规划---换钱的最少货币数(每种货币只有一张)

题目:   给定一个数组arr,arr中所有的值都为正数且不重复,每个值代表一种面值的货币,每种面值的货币只有一张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。 基本思路:   生成dp数组,数组的每一行和每一列可以先确定,其他的位置dp[i][j] = min(dp[i-1][j], dp[i-1][j-arr[i]]+1)#python3.5#经典动态规划实现def

2017-08-12 00:18:12 779

原创 递归与动态规划---换钱的最少货币数(每种货币有无数张)

题目:   给定一个数组arr,arr中所有的值都为正数且不重复,每个值代表一种面值的货币,每种面值的货币有无数张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。 基本思路:   生成dp数组,数组的每一行和每一列可以先确定,其他的位置dp[i][j] = min(dp[i-1][j], dp[i][j-arr[i]]+1)#python3.5#经典动态规划实现def mi

2017-08-12 00:15:12 3249 1

原创 递归与动态规划---矩阵的最小路径和

【题目】  给定一个矩阵m,从左上角开始每次都只能向下或者向右走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。【基本思路】     生成和m同样大小的矩阵dp,dp[i][j]的值表示从左上角走到位置(i, j)的最小路径和,矩阵的第一行和第一列的值可以先确定,其他的位置dp[i][j]的值等于min(dp[i-1][j], dp[i][j-1...

2017-08-12 00:06:58 944

原创 递归与动态规划---斐波那契系列问题的递归,动态规划与矩阵乘法

【题目】给定整数N,返回斐波那契数列的第N项假设农场中成熟的母牛每年只会生一头小母牛,并且永远不会死。第一年农场有1只成熟的牛,从第二年开始,母牛开始生小母牛。每只小母牛3年之后 成熟又可以生小母牛。给定整数N,返回N年后牛的数量。【基本思路】   原问题。O(2^N)的方法。斐波那契数列为1,1,2,3,5,8……,也就是除第一项和第二项以外,对于第N项,有F(N) = F(N-

2017-08-11 23:55:43 1220

原创 二叉树问题---统计完全二叉树的节点个数

基本思路:   可以利用完全二叉树的性质,首先判断头节点的右子树的最左节点是否和头节点的最左节点在同一层。   如果在的话,说明头节点的左子树是一棵满二叉树,可以用公式计算出左子树的节点个数,再加上头节点,也就是(2^h-1)+1,接下来再计算右子树的个数,可以用递归的方式求出来。   同理,如果头节点的右子树的最左节点和头节点的最左节点不在同一层,则右子树是一棵满二叉树,可以用公式计算出右子

2017-08-11 23:46:47 1018 1

原创 二叉树问题---统计所有可能的二叉树结构的种数

问题:   给定一个整数N,如果N<1,代表空树结构,否则代表中序遍历的结果为{1,2,3,…,N}。请返回可能的二叉树结构有多少。 基本思路:   假设num[n]代表n个节点的搜索二叉树有多少种可能。假设序列{1 , …, i , … , N},如果以i作为头结点,i的左子树有i-1个节点,所以可能的结构有num[i-1]种,右子树有N-i个节点,所以有num[N-i]种可能,故以i作为头

2017-08-11 23:35:00 1305

原创 二叉树问题---通过先序和中序数组生成后序数组

基本思路:   根据当前的先序和中序数组,设置后序数组最右边的值,然后划分出左子树的先序、中序数组,以及右子树的先序、中序数组,先根据右子树的划分设置好后序数组,再根据左子树的划分,从右边到左边依次设置好后序数组的全部位置#python3.5#通过先序和中序数组生成后序数组def preInToPos(pre, mid): def preInPos(pre, pi, pj, mid,

2017-08-11 23:20:23 986

原创 二叉树问题---先序,中序,和后序数组两两结合重构二叉树

注意:   如果一棵二叉树除叶节点之外,其他的节点都有左孩子和右孩子,这样的树才能被先序和后序数组重建#python3.5#先序,中序数组重构二叉树def preInToTree(pre, mid): def preIn(pre, pi, pj, mid, mi, mj, map): if pi > pj: return None

2017-08-11 23:13:42 485

原创 二叉树问题---二叉树节点间的最大距离

问题:   从二叉树节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫做A到B的距离。基本思路:   一个以h为头的树上,最大的距离只可能来自以下三种情况:h左子树上的最大距离h右子树上的最大距离h左子树上离h.left最远的距离+1+h右子树上离h.right最远的距离 三个值中的最大值就是整棵h树中最远的距离#python3.5#二叉树节点

2017-08-11 23:06:26 1116

原创 二叉树问题---在二叉树中找到两个节点的最近公共节点

问题:给定一棵二叉树的头节点head,以及这棵树中的两个节点o1和o2,请返回o1和o2的最近 公共祖先节点基本思路:  后序遍历二叉树,假设遍历到的当前节点为cur,首先依次遍历它的左孩子和右孩子,此时可能发生以下的四种情景:如果发现cur等于None,或者等于o1或者等于o2,返回cur如果左孩子和右孩子都为空,说明cur整棵子树上没有出现过o1和o2,返回None如果左孩子和右孩子

2017-08-11 22:45:28 933

原创 二叉树问题---通过有序数组生成平衡搜索二叉树

#通过有序数组生成平衡搜索二叉树def generateTree(arr): def generate(arr, start, end): if start > end: return None center = (start + end) // 2 head = TreeNode(arr[center])

2017-08-02 02:03:54 651

原创 二叉树问题---判断一棵树是否为完全二叉树

#判断一棵树是否为完全二叉树def isCBT(root): if not root: return True isLeaf = False queue = [] queue.append(root) while queue: root = queue.pop(0) left = root.left

2017-08-02 02:03:12 475

原创 二叉树问题---判断一棵树是否为搜索二叉树

#判断一棵树是否为搜索二叉树def isBST(root): if not root: return True res = True pre = None cur1 = root cur2 = None while cur1: cur2 = cur1.left if cur2:

2017-08-02 02:02:37 441

原创 二叉树问题---根据后序数组重建搜索二叉树

#根据后序数组重建搜索二叉树def postArrayToBST(arr): def arrayToBST(arr, start, end): if start > end: return None root = TreeNode(arr[end]) leftEnd = -1 rightStart =

2017-08-02 02:01:37 506

原创 二叉树问题---判断数组是否为某搜索二叉树的后序遍历的结果

#判断数组是否为某搜索二叉树的后序遍历的结果def isPostArray(arr): def isPost(arr, start, end): if start == end: return True leftEnd = None rightStart = None for i in range(en

2017-08-02 02:00:50 439

原创 二叉树问题---判断二叉树是否为平衡二叉树

#判断二叉树是否为平衡二叉树def isBalance(root): def judgeIsBalance(root, level, res): if not root: return level lH = judgeIsBalance(root.left , level+1, res) if res[0] == Fa

2017-08-02 01:59:39 524

原创 二叉树问题---判断t1树中是否有与t2树拓扑结构完全相同的子树

说明: 两种方法: 方法1: 对于t1的每棵子树,都去判断是否与t2树的拓扑结构完全一样,这个过程的实践复杂度是O(M),t1的子树共有N棵,所以时间复杂度为O(M*N) 方法2: 首先把t1树和t2树按照先序遍历的方式序列化,之后用KMP算法去判断t2Str是否是t1Str的子串即可。t1的序列化的过程是O(N),t2的序列化是O(M),KMP算法解决匹配问题的复杂度是O(M+N),所以

2017-08-02 01:57:23 1277

原创 二叉树问题---判断t1树是否包含t2树全部的拓扑结构

#判断t1树是否包含t2树全部的拓扑结构def isContain(t1, t2): def check(t1, t2): if not t2: return True if not t1 or t1.val != t2.val: return False return check(t1.lef

2017-07-31 02:52:49 763

原创 二叉树问题---寻找搜索二叉树中两个错误的节点

题目: 一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找出这两个错误的节点并返回。已知二叉树中所有节点的值都不一样,给定二叉树的头节点,返回一个长度为2的二叉树节点类型的数组errs。def getTwoErrorNode(root): errs = [None for i in range(2)] if not root:

2017-07-31 02:50:49 912

原创 二叉树问题---二叉树的按层打印和ZigZag打印

#按层打印def printByLevel(root): if not root: return print("Print binary tree by level") queue = [] queue.append(root) last = root level = 1 print("Level " + str(level)

2017-07-31 02:17:27 639

原创 二叉树问题---找到二叉树中的最大搜索二叉子树

题目: 给定一棵二叉树的头节点head,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉树,并返回这棵子树的头节点。(注意子树的概念)def biggestSubBST(root): def findBiggestSubBST(root, record): if not root: record[0] = 0 reco

2017-07-31 02:14:46 746

原创 二叉树问题---在二叉树中找到累加和为指定值的最长路径长度

题目: 给定一棵二叉树的头节点head和一个32位整数sum,二叉树节点值类型为整型,求累加和为sum的最长路径长度。路径是指从某个节点往下,每次最多选择一个孩子节点或者不选所组成的节点链。def getMaxLength(root, K): def getLengthByPreOrder(root, K, preSum, level, length, map):

2017-07-31 02:09:11 1818

原创 二叉树问题---二叉树的序列化和反序列化

说明:二叉树被记录成文件的过程叫作二叉树的序列化,通过文件内容重建原来二叉树的过程叫作二叉树的反序列化#二叉树的序列化和反序列化(先序)def serialByPre(root): if not root: return '#!' res = root.val + '!' res += serialByPre(root.left) res += se

2017-07-31 01:57:42 691

原创 二叉树问题---打印二叉树的边界节点

问题:给定一棵二叉树的头节点,按照如下两种标准分别实现二叉树边界节点的逆时针打印。 标准一:1.头节点为边界节点2.叶节点为边界节点3.如果节点在其所在层中的最左边或最右边,那么也是边界节点标准二:1.头节点为边界节点2.叶节点为边界节点3.树左边界延伸下去的路径为边界节点4.树右边界延伸下去的路径为边界节点#标准一def printEdge1(root): def get

2017-07-31 01:55:42 1330

原创 二叉树问题---较为直观的打印二叉树

class TreeNode: def __init__(self, x): self.val = x self.left = None sele.right = Nonedef printTree(root): if not root: return print("Binary Tree: ") pr

2017-07-31 01:51:36 844 1

原创 二叉树的一些操作的代码实现

计算树的深度def getDepth(root): if not root: return 0 return 1 + max(getDepth(root.left), getDepth(root.right))计算树的带权路径长度def getWPL(root, depth=0): if not root: return 0 if no

2017-07-28 01:29:12 301

原创 二叉树问题---二叉搜索树查找、插入与删除的代码实现

class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None查找def Find(root, x): if not root: print("The number {} is not found".format

2017-07-26 17:44:42 551 1

原创 八大经典排序算法基本思想及代码实现(Python、C++)

一.插入排序——简单插入排序基本思想:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。void insertSort(vector&lt;int&gt; &amp;arr){ if(arr.size() &lt;= 1) { return; } int j; int tmp; ...

2017-07-26 12:56:16 965

原创 二叉树问题---二叉树的前中后序的递归,非递归及Morris遍历

class TreeNode: def __init__(self, x): root.val = x root.left = None root.right = None创建二叉树def create_tree(root): element = input("Enter a key:") if element == '#':

2017-07-26 11:12:05 828

转载 Detection物体检测及分类方法总结(RFCN/SSD/RCNN/FastRCNN/FasterRCNN/SPPNet/DPM/OverFeat/YOLO)

这里搜集了一些关于物体检测的方法分析和介绍,看好哪个可以去详细研究一下,基本都有论文或代码的链接。这里是简述各种方法,下面有详细叙述方法选择:========DPM=========使用传统的slider window的方法 计算量非常大========OverFeat====改进了Alex-net,并用图像缩放和滑窗方法在test数据集上测

2017-04-09 00:52:06 972

原创 ubuntu下安装cuda,cudnn以及tensorflow(gpu)

在此之前,请先安装显卡驱动,如下修改之后重启电脑。安装cuda:         在官网下载cuda8.0,注意选择版本,我选择的是ubuntu16.04-deb(local)版本。       官网下面其实有安装教程,终端输入在:       sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.de

2017-04-08 23:49:54 922

原创 使用virtualenv创建python虚拟环境

前几天安装了3.5版本的python,但是很多情况下我们需要使用python2.7,比如运行python2.7的代码或者安装python2.7的包之类的。这种情况下可以使用virtualenv来创建python虚拟环境。       首先安装virtualenv       pip install virtualenv      或者      sudo apt-get i

2017-03-30 22:29:37 325

C语言常见的问题集

1.1 我如何决定使用那种整数类型? 如果需要大数值 (大于 32,767 或小于 −32,767), 使用 long 型。否则, 如果空 间很重要 (如有大数组或很多结构), 使用 short 型。除此之外, 就使用 int 型。如 果严格定义的溢出特征很重要而负值无关紧要, 或者你希望在操作二进制位和字 节时避免符号扩展的问题, 请使用对应的无符号类型。但是, 要注意在表达式中混 用有符号和无符号值的情况。 尽管字符类型 (尤其是无符号字符型) 可以当成 “小” 整型使用, 但由于不可预 知的符号扩展和代码增大有时这样做可能得不偿失。使用无符号字符型有所帮助; 类似的问题参见问题 12.1。 在选择浮点型和双精度浮点型时也有类似的权衡。但如果一个变量的指针必 须为特定的类型时, 以上规则不再适用。

2018-05-22

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除