![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 53
lxqfirst
这个作者很懒,什么都没留下…
展开
-
最小公倍数
int lcm( int m, int n){ return (m*n)/gcd(m, n);}原创 2012-08-29 09:18:05 · 297 阅读 · 0 评论 -
找出字符串中对称的子字符串的最大长度(最长回文)
转发:http://blog.csdn.net/beiyeqingteng/article/details/7097146背景:所谓对称子字符串,就是这个子字符串要么是以其中一个词对称:比如 “aba”, “abcba”;要么就完全对称:比如"abba", "abccba"。问题:给你一个字符串,找出该字符串中对称的子字符串的最大长度。思路:首先,我们用字符数组转载 2012-09-03 20:50:33 · 1086 阅读 · 0 评论 -
从Trie树(字典树)谈到后缀树
转自:http://blog.csdn.net/v_july_v/article/details/6897097 从Trie树(字典树)谈到后缀树出处:http://blog.csdn.net/v_JULY_v 。 引言 常关注本blog的读者朋友想必看过此篇文章:从B树、B+树、B*树谈到R 树,这次,咱们来转载 2012-09-03 16:19:50 · 1791 阅读 · 0 评论 -
快速寻找满足条件的两个数或三个数
问题:1. 快速找出一个数组中的两个数,让这两个数之和等于一个给定的值。2. 快速找出一个数组中的三个数,让这三个数之和等于一个给定的值。1. 解法:算法复杂度为O(nlogn)。先用快速排序对数组排序,让后用双指针(双索引)法对排序好的数组进行反向遍历,并且遍历的方向不变。(若是计算两个数的和,则初始化为i=0,j=n-1,若是计算两个数的差,则初始化为i=0,j=1)之转载 2012-08-29 09:39:07 · 591 阅读 · 0 评论 -
静态局部变量
在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其初始化为0。 静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局原创 2012-09-13 21:08:29 · 339 阅读 · 0 评论 -
重建二叉树
摘自刘汝佳的《算法竞赛入门经典》PreOrder(T) = T 的根结点 + PreOrder(T 的左子树) + PreOrder(T 的右子树);InOrder(T) = InOrder(T 的左子树) + T 的根结点 + InOrder(T 的右子树);PostOrder(T) = PostOrder(T 的左子树) + PostOrder(T 的右子树) + T 的根原创 2012-09-16 14:58:24 · 573 阅读 · 0 评论 -
数组中最大和的子数组
题目:输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组,要求时间复杂度为O(n)。例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,最大和的连续子数组为3, 10, -4, 7, 2,其最大和为18。背景:本题最初为2005年浙江大学计算机系考研题的最后一道程序设计题,在2006年里包括google在内的转载 2012-09-15 20:27:24 · 781 阅读 · 2 评论 -
百度最新面试题集锦
1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。例子:func(7) = 4,可以证明最少需要4次运算n = 7n-1 6n/2 3n-1 2n/2 1要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(转载 2012-09-15 21:22:08 · 975 阅读 · 0 评论 -
根据二叉树的先序、中序遍历结果重建二叉树
先序遍历为:1 2 4 5 3 6,中序遍历为:4 2 5 1 6 3思路:先序遍历的第一个元素为根节点,在中序遍历中找到这个根节点,从而可以将中序遍历分为左右两个部分,左边部分为左子树的中序遍历,右边部分为右子树的中序遍历,进而也可以将先序遍历除第一个元素以外的剩余部分分为两个部分,第一个部分为左子树的先序遍历,第二个部分为右子树的先序遍历。由上述分析结果,可以递归调用构建函数,根据转载 2012-09-16 15:24:32 · 7447 阅读 · 2 评论 -
找出数组中两个只出现一次的数字
转自:http://blog.csdn.net/ewanyou/archive/2011/05/25/6445209.aspxhttp://www.cnblogs.com/aLittleBitCool/archive/2011/04/14/2015720.html问题描述:一个数组中除了两个数字之外,其余数字均出现了两次(或偶数次)。请写出程序查找出这两个只出现一次的数字,要求时间复杂度为转载 2012-09-19 19:39:06 · 793 阅读 · 0 评论 -
栈增长方向与大端/小端问题
栈增长和大端/小端问题是和CPU相关的两个问题。在内存管理中,与栈对应是堆。对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。在内存中,“堆”和“栈”共用全部的自由空间,只不过各自的起始地址和增长方向不同,它们之间并没有一个固定的界限,如果在运行时,“堆”和 “栈”增长到发生了相互覆盖时,称为“栈堆冲突”,系统肯定垮台。转载 2012-09-20 10:59:47 · 640 阅读 · 0 评论 -
判断栈的增长方向
dreamhead老大曾经讨论过这个问题,寻找一种可移植的方式来判断栈的增长方向,见《栈的增长方向》。 今天在读Ruby hacking guide第5章,介绍alloca函数的部分,提到ruby实现的C语言版本的alloca.c,读了下代码,发现这里倒是实现了一个很漂亮的函数用于 实现判断栈的增长方向,利用了局部static变量,与dreamhead老大的想法其实是一致的。cpp 代码转载 2012-09-20 21:05:00 · 377 阅读 · 0 评论 -
蓄水池抽样问题
为分析用户行为,系统常需存储用户的一些query,但因query非常多,故系统不能全存,设系统每天只存m个query,现设计一个算法,对用户请求的query进行随机选择m个,请给一个方案,使得每个query被抽中的概率相等,并分析之,注意:不到最后一刻,并不知用户的总请求量。 蓄水池抽样问题随机抽样问题表示如下:要求从N个元素中随机的抽取k个元素,其中N无法确定。这种应用的场景转载 2012-09-21 18:47:06 · 506 阅读 · 0 评论 -
全局变量、局部变量、静态全局变量、静态局部变量的区别
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直到程序与你新转载 2012-09-21 20:08:43 · 360 阅读 · 0 评论 -
二叉查询树三种遍历的非递归写法
这里写出三种儿叉查询树遍历的非递归写法,非常有意思。preorder:先打印root,再left,最后right。[java] view plaincopypublic static void BSTPreorderTraverse(Node node) { if (node == null) { return; }转载 2012-09-02 16:30:50 · 761 阅读 · 0 评论 -
编辑距离
问题:给定两个字符串 A和B,由A转成B所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将A(kitten)转成B(sitting):sitten (k→s)替换sittin (e→i)替换sitting (→g)插入思路:如果我们用 i 表示当前字符串 A 的下标,j 表示当前字符串 B 的下标。 如果我们用d转载 2012-09-03 15:53:52 · 391 阅读 · 0 评论 -
交换序列a,b中的元素,使|sum(a)-sum(b)
有两个序列a,b,大小都为n,序列元素的值任意整数,无序.要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: int[] a = {100,99,98,1,2, 3};int[] b = {1, 2, 3, 4,5,40}; 求解思路: 当前数组a和数组b的和之差为 A = sum(a) - sum(转载 2012-09-03 15:58:53 · 1191 阅读 · 0 评论 -
子数组最大乘积
思路:统计数组中正数、负数、0的个数:1.数组中有多于一个零则最大乘积为0;2.数组中只有一个零,而有奇数个负数,则最大乘积为0;3.数组中只有一个零,而有偶数个负数,则最大乘积为非0的元素的乘积; 4.数组中没有零,而有奇数个负数,则最大乘积为除去绝对值最小的负数的乘积; 5.数组中没有零,而有偶数个负数,则最大乘积为除去最小的正数的乘积。这样时间复杂原创 2012-08-29 10:25:38 · 464 阅读 · 0 评论 -
编程之美2.14扩展问题1 求子数组和的最大值(首尾可以相连)
转自:http://blog.csdn.net/zsuguangh/article/details/6338124整体思路:问题的解可以分为两种情况:1)解没有跨过A[n-1]到A[0],即普通的求子数组和的最大值2)解跨过A[n-1]到A[0]对第二种情况,只要找到从A[0]开始和最大的一段(A[0],...,A[j])(0M_2=A[i]+...A[n-1]转载 2012-08-29 13:42:33 · 639 阅读 · 0 评论 -
const成员函数使用方法(对照表)
对象成员函数对/错1constconst对2constnot-const错3non-constconst对4not-constnot-const对上表为利用对象调用成员函数 成员函数成员函数对/错1con原创 2012-08-30 09:09:47 · 312 阅读 · 0 评论 -
用C++设计一个不能被继承的类
转自:http://www.cnblogs.com/abiao/articles/1277285.html分析:这是Adobe 公司2007 年校园招聘的笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花转载 2012-08-30 10:11:53 · 249 阅读 · 0 评论 -
Boost
boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过对比STL,boost更加实用。STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。 boost主要包含一下几个大类:字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、原创 2012-08-30 15:11:17 · 272 阅读 · 0 评论 -
判断二叉树是不是平衡
题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差都不超过1,按照定义它就是一棵平衡的二叉树。这种思路对应的代码如下:bool转载 2012-08-30 16:41:15 · 322 阅读 · 0 评论 -
找出数组中两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我转载 2012-08-30 19:51:18 · 543 阅读 · 0 评论 -
把数组排成最小的数
转自:http://blog.csdn.net/cxllyg/article/details/7659525问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。 思路:先将整数数组转为字符串数组,然后字符串数组进行排序,最后依次输转载 2012-08-31 09:51:18 · 415 阅读 · 0 评论 -
把一个字符串转成double类型的数
问题:一个int数组, 比如 array[],里面数据无任何限制,要求求出所有这样的数array[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。分析:最原始的方法是检查每一个数 array[i] ,看是否左边的数都小于等于它,右边的数都大于等于它。这样做的话,要找出所有这样的数,时间复杂度为O(N^2)。其实可以有更简单的方法,我们转载 2012-09-01 21:04:13 · 1019 阅读 · 0 评论 -
全排列的非递归算法
转自:http://blog.csdn.net/niuox/article/details/7660980这个讲解的非常通俗易通,所以记录下来备用。先大体介绍一下算法思路:比如说有1234四个数字,我们要将这四个数字实现全排列。抛弃初中老师教我们的4×3×2×1的思路,我们来换一种思路。“1234”当然是第一个排列,要得到第二个排列,我们选取刚好比它大的,我们用大脑当然想的到是转载 2012-08-31 19:14:47 · 840 阅读 · 0 评论 -
寻找捣乱分子对
问题描述:多人排成一个队列,我们认为从低到高是正确的序列,但是总有部分人不遵守秩序。如果说,前面的人比后面的人高(两人身高一样认为是合适的),那么我们就认为这两个人是一对“捣乱分子”,比如说,现在存在一个序列:176, 178, 180, 170, 171 这些捣乱分子对为, , , , , ,那么,现在给出一个整型序列,请找出这些捣乱分子对的个数(仅给出捣乱分子对的数目即可,不转载 2012-09-01 21:23:09 · 885 阅读 · 0 评论 -
求整数随机数构成的数组中找到长度大于=3的最长的等差数列
转自:http://blog.csdn.net/cwqbuptcwqbupt/article/details/7546674点击打开链接求整数随机数构成的数组中找到长度大于=3的最长的等差数列输出等差数列由小到大: 如果没有符合条件的就输出[0,0]格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5]要求时间复杂度,空间复杂度尽量小网上有动态规划的转载 2012-09-01 11:09:50 · 1400 阅读 · 0 评论 -
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
头文件:#ifndef BinaryTree_H#define BinaryTree_H#include #include class BinaryTree{private: typedef int Item; typedef struct TreeNode { Item Node; TreeNode* p转载 2012-09-02 16:46:27 · 561 阅读 · 0 评论 -
malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不转载 2012-09-21 15:43:18 · 438 阅读 · 0 评论