自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hao_09的专栏

Record easily overlooked details!

  • 博客(46)
  • 资源 (8)
  • 收藏
  • 关注

原创 第一个只出现一次的字符

题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b‘。思路:        我们可以定义哈希表的键值(Key)是字符的ASCII值,而值(Value)是该字符出现的次数。同时我们需要扫描两次字符串,第一次扫描字符串时,每扫描到一个字符就在哈希表的对应项中把次数加1。接下来第二次扫描的时候,没扫描到一个字符就能在哈希表中得到该字符出现的次数。找出第一个Val

2015-05-29 13:24:57 1051

原创 丑数

题目:我们把只包含因子2、3、5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。   思路:        根据丑数的定义,丑数应该是另一个丑数乘以2、3或者5的结果(l除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数,每一个丑数都是前面的丑数乘以2、3或者5得到的。

2015-05-28 21:56:11 971

原创 把数组排成最小的数

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323。思路:  对于数字a和b,排列的结果为ab和ba,如果ab小于ba,应该输出ab,即a排在b的前面,也就是a//数组中每个整数的最大长度const int g_MaxNumberLength=10;

2015-05-28 21:10:33 1077

原创 连续字数组的最大和

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间杂度为O(n)。此题思路比较简单,直接上代码,注意考虑无效的输入。//全局变量,判断输入参数是否无效bool g_InputInvalid=false;int FindGreatestSumOfArray(int *data, int length){ if

2015-05-27 20:24:45 1524

原创 最小的K个数

题目:输入n个整数,找出其中最小的K个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。思路:    我们可以先创建一个大小为k的数据容器来存储最小的k个数字,接下来我们每次从输入的n个整数中读入一个数。如果容器中已有的数字少于k个,则直接把这次读入的整数放入容器之中;如果容器中己有k个数字了,也就是容器已满,此时我们不能再插入新的数字而只能替换已有的

2015-05-27 19:39:20 965

原创 数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。思路:数组中有一个数字出现的次数超过数组长度的一半,也就是说它出现的次数比其他所有数字出现次数的和还要多。因此我们可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字,一个是次数。当我们遍历

2015-05-26 22:45:26 1088

原创 字符串的排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。思路:        我们以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一

2015-05-26 21:40:58 963

原创 二叉搜索树与双向链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};解法如下://返回双向链表的头结点BinaryTreeNo

2015-05-25 22:56:52 1108

原创 复杂链表的复制

题目:请实现函数ComplexListNode *Clone(ComplexListNode *pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C++小定义如下:struct ComplexListNode{ int m_nValue; ComplexListNode *

2015-05-20 22:52:09 1407

原创 二叉树中和为某一值的路径

题目:输入一棵一二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二义树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};思路:        由于路径是从根结

2015-05-18 22:34:22 1061

原创 二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。思路:   在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树结点的值,它们都比根结点的值小;第二部分是右子树结点的值,它们都比根结点的值大。代码如下:bool Verif

2015-05-18 21:43:09 1095

原创 linux目录结构及各目录的作用

Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:/binbin是binary的缩写。这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令。例如cp、ls、cat,等等。/boot这里存放的是启动Linux时使用的一些核心文件。/devdev是device(设备)的缩写。这个目录下是所有L

2015-05-17 20:42:34 7148

原创 从上往下打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图中的二叉树,则依次打印出8、6、10、5、7、9、11。二叉树结点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};思路:每一次打印一个结点的时候

2015-05-17 11:43:55 1060

原创 栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。思路:        如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序

2015-05-16 21:03:36 915

原创 包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中调用min,pop,push函数的时间复杂度都是O(1)。#include #include using namespace std;template class StackWidthMin{public: StackWidthMin(){} ~StackWidthMin(){} T& top()

2015-05-16 19:43:00 863

原创 顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下矩阵:1  2   3   45  6   7   89  10  11  1213 14  15  16则依次打印出数字1、2、3、4、8、12、16、15、12、13、9、5、6、7、11、10。//顺时针打印矩阵void PrintMatrixClockwisely(int **n

2015-05-16 11:53:13 826

原创 二叉树的镜像

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};思路:我们先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶护结点的左右子结点之后,就

2015-05-16 11:01:02 1049

原创 树的子结构

题目:输入两颗二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};//在数A中查找与树B根结点值相同的结点,然后递归判断,查找过程也是递归bool HasSubTree(BinaryTreeN

2015-05-15 22:29:07 770

原创 合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。链表结点定义如下:struct ListNode{ int m_nValue; int m_pNext;};如下图所示,一目了然,比较两个链表的头结点,值小的则并入新的结点,如此循环,可以用递归解决。//利用递归ListNode *Merge(ListNode *phead1, ListNod

2015-05-14 21:31:27 877

原创 反转链表

定义一个函数,输入一个链表的头结点,反转该链表,并输入反转后链表的头结点。 链表结点定义如下:struct ListNode{ int m_nKey; struct ListNode* m_pNext;};ListNode *ReverseList(ListNode *phead){ //定义反转后链表的头结点 ListNode *pReverseHead=NULL; //指

2015-05-14 20:57:12 758

原创 Remove Duplicates from Sorted Array II

Follow up for "Remove Duplicates": What if duplicates are allowed at most twice?For example,Given sorted array nums = [1,1,1,2,2,3],Your function should return length = 5, with the first five el

2015-05-13 22:15:23 826

原创 Remove Duplicates from Sorted Array

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with con

2015-05-13 21:39:21 924

原创 链表中倒数第k个结点

题目:输入一个单向链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头开始它们的值依次是1,2,3,4,5,6。这个链表的倒数第3个结点是值为4的结点。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};     

2015-05-13 21:08:10 792

原创 调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。解析:题目没说相对位置不变,用两个游标指向首尾,前面的偶数与后面的奇数交换即可。/*功能函数*/void ReOrderOddEven(int a[], int length){ int i,j;//定义两个游标 int temp; if

2015-05-13 20:31:19 792

原创 Remove Element

Given an array and a value, remove all instances of that value in place and return the new length.The order of elements can be changed. It doesn’t matter what you leave beyond the new length.//在数组中移

2015-05-12 21:17:29 825 1

原创 在O(1)时间删除链表结点

题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(l)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};void DeleteNode(ListNode **pListHead, ListNode *pToBeDeleted);把下一个结点的内容复制到需要删除的结点上覆盖原有的内容,

2015-05-12 20:00:06 1303

原创 打印1到最大的n位数

题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数即999。此题很容易误入陷阱!//第一次解法,不幸调入陷阱void print(int n){ if (n<1) { printf("Invalid Input!\n"); return; } long maxNum=(int)pow(10.0,n);//如果n很大,不

2015-05-11 22:40:18 769

原创 数值的整数次方

题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大多数问题。此题咋看非常easy,但是却很容易忽视底数为0以及指数为负数的情况,完整代码如下://全局变量,当参数出错时返回truebool g_InvalidInput=false;//判断两个double型变量是否相

2015-05-10 19:22:37 958

原创 二进制中1的个数

题目:请实现一个函数,输入一个整数,输出改数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,改函数输出2。常规解法:int CountbitOne(int n){ int count=0; while(n) { if (n&1) { count++; } n=n>>1; } return count;}最优解法思

2015-05-10 11:59:15 904

原创 斐波那契数列(递归和非递归实现)

递归实现是最常想到的方法,代码如下://递归方式long Fibonacci(unsigned n){ if (n==0) { return 0; } else if (n==1) { return 1; } else { return Fibonacci(n-1)+Fibonacci(n-2); }}显然递归并不是最好的方法,当n较大时效率将非常低下。

2015-05-10 11:26:27 1368

原创 旋转数组的最小数字

旋转数组中包含两个递增排序的子数组,有阴影背景的是第二个子数组。如下图所示:(1)把Pl指向数组的第一个数字,P2指向数组的最后一个数字。由于Pl和P2中间的数字5大于P1指向的数字,中间的数字在第一个子数组中。下一步把P1指向中间的数字。(2) Pl和P2中间的数字1小于P2指向的数字,中间的数字在第二个子数组中。下一步把P2指向中间的数字。(3)P1和P2指向两个相邻的

2015-05-09 17:30:51 1088

原创 二叉排序树(概念,查找,插入,删除)

查找基本概念查找表:由同一类型的数据元素构成的集合。对查找表的常用操作:查询元素是否存在、查询元素属性、插入一个数据元素、删除一个数据元素。查找:也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的数据元素。关键字:可以标识一个数据元素的某个数据项。主关键字:可以唯一地识别一个数据元素的关键字。静态查找表:只进行查询某元素在表中与否或检索某元素的各种属性操作的表。

2015-05-09 14:26:59 1667

原创 用两个栈实现队列

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。template class CQueue{public: CQueue(); ~CQueue(); void appendTail(const T &node); T deleteHead();private: st

2015-05-08 21:40:09 754

原创 重建二叉树

题目:        输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含童复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示的二叉树并输出它的头结点。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; Bin

2015-05-07 22:47:15 796

原创 c++模板

函数模板声明template 类型 函数名 ( 形式参数表 ) { 语句序列 }函数模板定义由模板说明和函数定义组成模板说明的类属参数必须在函数定义中至少出现一次函数参数表中可以使用类属类型参数,也可以使用一般类型参数#include template //函数模板T max ( T a , T b ){ return a >

2015-05-06 22:57:58 995

原创 遍历二叉树(四种方式:前序、中序、后序、层序)

二叉树顺序存储结构二叉树的顺序存储结构就是用一维数组存储二义树中的结点并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等。顺序存储结构一般只用于完全二叉树。将这棵二叉树存入到数组中,相应的下标对应其同样的位置: 二叉链表typedef struct BiTNode /* 结点结构 */{ TElemType

2015-05-06 21:21:29 5341

原创 百世集团2015暑期实习研发工程师笔试题

1 linux打包文件夹2 简单数据结构3 写一条SQL语句,找出表中登陆次数超过1次的用户user_id4 cashe机制5 hash异常6 进程、线程7 有10G大小的文件,每行记录一条运单信息,机器大小是500M,求出出现次数最多的前1000条运单号,给出思路。8 一个CString字符串,里面是小写字母“abddlldk....."(可重复),写出程序,求出

2015-05-05 20:34:47 2436

原创 【字符串】旋转字符串

题目描述给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。例如,字符串 abcdef ,若要让def翻转到abc的前头,只要按照下述3个步骤操作即可:首先将

2015-05-05 20:04:33 912

原创 c++之继承

子类对象空间总是不小于基类对象。        classFather{          int a,b;         public:         // 成员函数        };        class Son:publicFather{         int c;        public:          // 成员函数     

2015-05-04 22:54:30 1018

原创 运算符重载

运算符重载性质:1 不能创建新的操作符。2 双目操作符“::”、“.”、和“.*”不能重载。3 c++的操作符都是有优先级和结合性的,重载操作符后,其优先级和结合性是不会改变的。4 原先的操作符是单目的,重载也是单目形式的;原先操作符是双目的,重载也是双目的,这是不能改变的。5 操作符的重载只能针对自定义类型。即,在操作符定义的参数表中,至少有一个参数必须是自定义类型。

2015-05-04 22:16:17 1541

提取亚像素精度边缘及梯度方向

快速提取图像亚像素边缘坐标,以及梯度,用于对边缘形状描述,可以用于后续模板匹配

2014-10-14

数字图像处理课件(完整超清版)

非常好的数字图像处理课件,北大计算机科学技术研究所研究生课件,840多页,覆盖数字图像处理的各个方面,是数字图像处理入门和巩固的绝佳资料,个人感觉非常赞,与大家分享! 注:下载后请不要上传同样文件!

2014-05-10

图形中寻找连通域的算法

图形中寻找连通域的算法,VC++数字图形处理相关

2013-11-11

最小二乘法c++代码

最小二乘法程序,运行无误,相信对大家会有帮助

2013-11-11

vc++6.0行号显示

本人亲测,非常好用,vc++6.0也能显示行号了

2013-11-11

vc助手最新破解版2008/2010

vc助手最新破解版2008本人亲测可用,2010也可以

2013-11-11

数字图像处理典型算法源程序

非常适合初学者以及工作学习人员,代码齐全,编译运行无误,对编程能力的提高大有帮助,同时也适合科研参考

2013-10-11

空空如也

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

TA关注的人

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