自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zengzhen_CSDN的博客

不积跬步,无以至千里;不积小流,无以成江海。

  • 博客(25)
  • 收藏
  • 关注

原创 《编程之美》——求数组的最长递增子序列

问题: 求数组最长递增子序列。分析与解法: 【解法一】 对数组进行排序,将有序的数组与原数组一起求最长公共子序列,于是原问题可以转化为求最长公共子序列的问题。排序的时间复杂度为O(nlogn),求最长公共子序列的问题时间复杂度为O(n^2),总的时间复杂度为O(n^2)。【解法二】 使用动态规划的方法,因为要求长度为i的序列的Ai{a1,a2,……,ai}最长递增子序列,需要先求出序列Ai-

2015-11-28 18:08:02 434

原创 《编程之美》——求数组的子数组的最大值

问题: 求数组的子数组的最大值分析与解法: 【解法一】 穷举法,把每个子数组的和求出来并比较,输出最大值。时间复杂度为O(n^2)。代码:int maxSum(int *arr, int n){ int i, j; int sum, max = INT_MIN; for(i = 0; i < n; i++) { sum = 0;

2015-11-26 19:59:29 415

原创 《编程之美》——快速寻找符合条件的两个数

题目: 快速找出一个数组中的两个数字,使两个数字之和为一个特定的值。假设数组中至少存在一组符合要求的解。分析与解法: 【解法一】 穷举,从数组中任意选取两个数字,计算两个数字之和是否等于给定的数字。时间复杂度为O(n^2)。【解法二】 对数组中的每个数arr[i]都判定sum-arr[i]是否在数组中,于是题目就变成了一个查找算法。可以先对数组进行排序,再使用二分法进行查找,总的时间复杂度为

2015-11-25 12:15:26 900

原创 《编程之美》——寻找最近点对

题目: 给定平面上两个点的坐标,找出距离最近的两个点。分析与解法: 一般思路是蛮力算法,两两求N个点之间的距离并比较,得出最大距离,时间复杂度为O(N^2)。 优化算法是采用分治的思想,将N个点先按照 x 轴的坐标的中值 x = mX 平均分为左右两组,分别求出 xL 和 xR 中的最近点对的距离,因为最近点对一定是出现 xL 或 xR 中,或者是xL中的一个点与 xR 中的一个点之间,所有再

2015-11-24 19:07:07 634

原创 《编程之美》——最大公约数问题

问题: 求两个正整数的最大公约数,假设两个正整数都很大。分析与解法: 【解法一】 x与y的最大公约数与x对y的余数的最大公约数是相同的,即f(x, y) = f(y, y%x),可以把原问题转化为求两个更小数的最大公约数,直到其中一个数为0。代码:int gcd(int x, int y){ if(y == 0) return x; else

2015-11-23 12:25:44 486

原创 《编程之美》——寻找最大的K个数

题目: N个无序的数(可能数目非常大),选出其中最大的K个数。分析与解法:【解法一】 对N个数进行排序,然后选出最大的K个数。可以使用快速排序或堆排序,时间复杂度为O(NlogN)。 因为这里N的数目可能非常大,即N>>K,而前N-K个数可以不进行排序,使用可以部分排序的算法,如选择排序或交换排序,时间复杂度为O(NK)。【解法二】 当N的数值很大的时候,即N>>K。可以使用快速排序中的pa

2015-11-22 19:52:53 3068

原创 《编程之美》——寻找发帖“水王”

问题: 论坛中“水王”发帖的数目超过了帖子总数的一半,如果有当前论坛所有帖子的列表,求“水王”的ID。分析与解法: 一般的想法是根据ID对列表排序,若编号从0开始第N/2个ID即为“水王”的ID。这种方法的时间复杂度即为排序的时间复杂度,选用较好的排序算法平均时间复杂度为O(nlogn)。 避免排序,时间复杂为O(N)的解法是,每次从列表中删除两个不同的ID(不管是否包括“水王”的ID),这并

2015-11-19 18:03:31 1151

原创 《编程之美》——不要被阶乘吓倒

问题:给定一个整数N,求N!末尾的0的个数。求N!的二进制表示中最低位1的位置。分析与解法:—— 问题1 【解法一】 计算因式分解中5的指数,再求和。代码:int zeroNum(int N){ int num = 0; for(int i = 0; i <= N; i++) { int j = i; while(j % 5 ==

2015-11-19 11:21:49 401

原创 《编程之美》——求二进制数中1的个数

问题: 求一个字节(8bit)的无符号整型变量二进制表示中“1”的个数。要求执行效率尽可能高。分析与解法:【解法一】 每次除2取余,若为奇数则累加,最终累加结果为“1”的个数。 如,10100010除以2,商为1010001,余数为0;1010001除以2,商为101000,余数为1。时间复杂度O(log2v)。代码:int count(int v){ int num = 0;

2015-11-18 12:28:43 412

原创 《编程之美》——分层遍历二叉树

问题1: 给定一棵二叉树,要求从上到下从左到右分层输出该二叉树的节点值。问题2: 从左到右输出二叉树中某一层的节点值。分析与解法:【解法一】 使用递归的方法。先解问题2,然后用问题2的解法依次遍历其各层节点。于是假设要求访问二叉树中第k层的节点,那么其实可以把它转化成分别访问以该二叉树根节点的左右孩子节点为根节点的两棵子树中层次为k-1的节点。代码:typedef struct Node{

2015-11-16 19:28:22 1008

原创 《编程之美》——重建二叉树

问题: 已知二叉树的前序和中序遍历结果,重建二叉树。分析与解法:初始:用前序遍历序列确定根节点,在中序遍历序列中找到该根节点,则左右子树分别为中序中该节点左右的序列。迭代:对各个子树分别执行三步操作,1.在前序序列中找子树的根节点;2。在中序序列中找子树的根节点,并划分开根节点的左右子树;3.根据新生成的左右子树,在前序序列中划分开这些节点,从而得到了两颗子树的前序、中序序列。代码:type

2015-11-13 19:53:10 412

原创 《编程之美》——求二叉树中节点的最大距离

问题: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义”距离”为两个节点之间的个数。 写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 如下图所示,粗箭头的边表示最长距离: 分析与解法: 把所有节点的左子树的深度和右子树的深度都计算出来,这样每个节点的最大长度也就是左子树的深度加上右子树的深度。遍历所有的节点,找到最大长度。时间复杂度为O(n)。代码如下:typ

2015-11-12 15:47:56 554

原创 《编程之美》——队列中取最大值操作的问题

问题: 假定有这样一个拥有3个操作的队列: 1. EnQueue(v): 将v加入队列中 2. DeQueue(): 使队列中的队首元素删除并返回此元素 3. MaxElement(): 返回队列中的最大值 请设计一种数据结构和算法,让MaxElement()操作的时间复杂度尽可能的低。分析与解法:【解法一】 利用一个数组或者链表来存储队列的元素,利用两个指针分别指向队列的队首和队尾。如

2015-11-11 15:09:04 1803

原创 《编程之美》——编程判断两个链表是否相交

问题: 给出两个链表的头指针,判断这两个链表是否相交。假设两个链表均不带环。 分析与解法:【解法一】 如果两个链表都无环,则可以把第二个链表接在第一个链表后面,如果得到的链表有环,则说明这两个链表相交。这里如果有环,则第二个链表的表头一定在环上,只需要从第二个链表开始遍历,看是否会回到起点即可判断。假设两个链表长度分别为m和n,则时间复杂度为O(m+n)。 【解法二】 若两个链表都无环且交

2015-11-10 16:41:05 3412 1

原创 《编程之美》——最短摘要的生成

问题: (简化)输入两个字符串,一个表示用户输入的搜索关键词,另一个表示一篇网页的内容。对于搜索关键词和网页分别进行自动分词后,用户输入的搜索关键词和网页内容的两个字符串变为两个词语序列。所求摘要即为网页序列中包含搜索关键词序列的最短的子串。(文档序列包含查询序列里面的所有词语,但是不要求顺序相同,最短摘要是所有满足这样要求的最短子串。)分析与解法: 假设W数组是经过网页分词之后的结果,其中W[

2015-11-09 15:46:02 533

原创 《OpenCV2》编程手册——使用直方图统计像素

计算图像的直方图图像是由像素组成的,在一个单通道的灰度图像中,每个像素的值介于0~255之间。直方图是一个简单的表,给出了一副图像或一组图像中拥有给定数值的像素数量。灰度图像 的直方图有256个条目(容器)。0号容器给出值为0的像素个数,1号容器给出值为1的像素个数,以此类推。定义一个专门的类处理单通道的灰度图像。class Histogram1D{private: int histS

2015-11-08 16:18:45 411

原创 求最长公共子串

问题: 求字符串的最长公共子串。 (这里注意子序列和子串的区别,子序列可以是从原字符串中取出一部分元素重新拼接而成的字符串,但取出的元素之间的前后关系要与原字符串一致;而子串则必须是连续的。如”adf”是”abcdef”的子序列,而不是子串。)分析与解法: 使用动态规划来求解。采用一个二维矩阵来记录中间的结果。以”bab”和”caba”(当然现在一眼就可以看出来最长公共子串是”ba”或”ab”

2015-11-06 16:28:49 611

原创 求最长公共子序列

问题: 求两字符序列的最长公共字符子序列。 (这里注意子序列和子串的区别,子序列可以是从原字符串中取出一部分元素重新拼接而成的字符串,但取出的元素之间的前后关系要与原字符串一致;而子串则必须是连续的。如”adf”是”abcdef”的子序列,而不是子串。)分析与解法: 设序列X={x0,x1,…,xm-1}和Y={y0,y1,…,yn-1}的最长公共子序列为Z={z0,z1,…,zk-1} ,则

2015-11-06 12:37:50 498

原创 字符串回文子序列问题

【问题1】求字符串回文子序列的个数问题:给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为”a”, “a”, “aa”, “b”, “aba”,共5个。内容相同位置不同的子序列算不同的子序列。分析与解法:与子串不同,子序列是可以不连续的,只要元素的前后相对位置不变。解法一:递归假设s[0 … n-1]是给定的序列,长度为让 c(0,n-1)表

2015-11-05 20:25:41 1157

原创 求最大子数组的和

问题: 给定一个数组a[0,…,n-1],数组元素有正有负,求其最大子数组(长度>=1)的和。分析与解法: 如果不考虑时间复杂度,可以枚举出所有子数组并求和。但是由于长度为n的数组有O(n^2)个子数组;而且求一个长度为n的数组的和的时间复杂度为O(n)。因此这种思路的时间是O(n^3)。很容易理解,当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这

2015-11-05 10:57:12 894

原创 malloc和free与new和delete的比较

• 本质区别malloc/free是c/C++语言的标准库函数,new/delete是C++的运算符 对于用户自定义的对象而言,用malloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此,C+

2015-11-04 19:49:38 366

原创 《编程之美》——从无头单链表中删除节点

问题: 假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点)。请将该节点从单链表中删除。分析与解法: 若要删除该节点,正常情况下,应该要知道该节点的前面节点的指针,但是由于单链表中没有头结点,所以无法追溯到该节点前面的那个节点,因此,这里采用了“狸猫换太子”的方法。设该节点为B,下一个节点为C。那么,首先将B节点的内容替换为C节点的内容,然后,将C

2015-11-04 16:25:27 1127

原创 《编程之美》——计算字符串的相似度

问题: 许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”);   2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如,对于“abcdefg”和“abcdef”两

2015-11-03 17:07:40 2066

原创 Binarized Normed Gradients for Objectness Estimation at 300fps阅读笔记

阅读论文选自CVPR2014的一篇文章《Binarized Normed Gradients for Objectness Estimation at 300fps》,作者程明明。本文对该论文进行整理分析,主要基于原论文的结构,首先概括该小节的主要内容,再阐述个人的理解和分析。摘要:使用objectness的方法生成小型的候选窗口(candidate object windows)集,可以加快经典

2015-11-02 16:00:14 619

原创 《编程之美》——电话号码对应英语单词

问题: 电话的号码盘一般可以用于输入字母,如用2可以输入a,b,c,用3可以输入d,e,f等。 对于号码5869872,可以依次输出其代表的所有字母组合。如:jtmwtpa,jtmwtpb……… 1、您能否可以根据这样的对应关系设计一个程序,尽可能快地从这些字母组合中找到一个有意义的单词来描述一个电话号码呢?如:可以用单词“computer”来描述号码26678837。分析与解法: 对于问题

2015-11-02 10:22:44 2865

空空如也

空空如也

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

TA关注的人

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