![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 70
rein07
这个作者很懒,什么都没留下…
展开
-
编程之美--最大公约数问题
思路:最大公约数问题也是一个非常典型的递归算法的应用。每次递归使得原来求两个大数之间的公约数转变成求两个稍微小点的数之间的公约数,要求转换的过程要保证不会改变公约数的值。这就要看其中转换的原理了。原理从《几何原本》中得出--辗转相除。假设f(x, y) 表示x,y的最大公原创 2011-09-01 15:56:01 · 3073 阅读 · 0 评论 -
快速排序的递归实现
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归或者非递归进行,以此达到整个数据变成有序序列。下面是快速排序的递归实现:view sourceprint?01 #include "stdafx.h" 02 ...原创 2011-08-25 18:54:59 · 126 阅读 · 0 评论 -
KMP快速字符串查找算法
在C/C++语言编程过程中,一般的字符串搜索操作都是通过标准库的strstr()函数来完成的,这在通常的情况下,因为字符串的搜索操作不多,并不会产生效率问题。实际上,这个函数的时间复杂度不容乐观。如果要从长度为n的字符串中查找长度为m的子字符串,那么这个strstr()函数的最坏时间复杂度为O(n*m),可见,随着子字符串长度m的增大,strstr()函数的时间复杂度也相应地成倍增加,有没有更加高...原创 2011-08-25 18:57:15 · 262 阅读 · 0 评论 -
计算从1到N中1的出现次数
给定一个十进制整数N,求出从1到N的所有整数中出现"1"的个数。例如:N=2,1,2出现了1个"1"。N=12,1,2,3,4,5,6,7,8,9,10,11,12。出现了5个"1"。最直接的方法就是从1开始遍历到N,将其中每一个数中含有"1"的个数加起来,就得到了问题的解。view sourceprint?01 public long CountOne3(long...原创 2011-08-25 18:59:31 · 303 阅读 · 0 评论 -
字符串逆序的算法汇总
很早就准备写一个字符串系列的面试题,本来已经写好了,大概有十几道题,但是写完才发现,文章好长,连我自己都没有耐心读下去了,索性就将其拆分成几个系列,一来分开后篇幅变小,看起来比较方便。二来也更有针对性,便于精雕细作。比如这篇,在原来的文章中只占很小的篇幅,但是独立出来才发现,东西也不少。既然是第一篇,就来个最最简单的字符串逆序吧。字符串逆序可以说是最经常考的题目。这是一道入门级的题目,相信...原创 2011-08-25 19:01:53 · 389 阅读 · 0 评论 -
判断一个整数是否是2的N次方
题目:给定一个整数num,判断这个整数是否是2的N次方。比如,2,4,8是2的那次方,6,10不是2的N次方。请看下面的程序:public static bool Check1(int num){ int i = 1; while (true) { if (i > num) return false;...原创 2011-08-25 19:04:21 · 1186 阅读 · 0 评论 -
二叉树中的最近公共祖先问题
题目:要求寻找二叉树中两个节点的最近的公共祖先,并将其返回。view sourceprint?1 class Node 2 { 3 Node * left; 4 Node * right; 5 Node * parent; 6 }; 7 /*查找p,q的最近公共祖先并将其返回。*/ ...原创 2011-08-25 19:16:41 · 93 阅读 · 0 评论 -
买书折扣最优惠问题解法
题目:在节假日的时候,书店一般都会做促销活动。由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。在销售的《哈利波特》平装本系列中,一共有五卷,用编号0, 1, 2, 3, 4来表示。假设每一卷单独销售均需要8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下:view sourceprint?1 本数 折扣 2...原创 2011-08-25 19:17:29 · 232 阅读 · 0 评论 -
求能被1到20的数整除的最小正整数
求能被1到20的数整除的最小正整数。最直觉的方法是求1到20这20个数的最小公倍数。求n个数的最小公倍数,以a,b,c三个数为例,他们的最小公倍数等于:先求a与b的最小公倍数m,然后m和c的最小公倍数即着三个数的最小公倍数。求两个数a,b的最小公倍数嘛,先取出其中较大的那个比如a,然后再用k*a去试探能否被较小那个数整除,其中,k是从1开始的自然数 k*a...原创 2011-08-25 19:18:56 · 1062 阅读 · 0 评论 -
背包问题之硬币找零问题
设有6 种不同面值的硬币,各硬币的面值分别为5 分,1 角,2 角,5 角,1 元,2元。现要用这些面值的硬币来购物和找钱。购物时可以使用的各种面值的硬币个数存于数组Coins[1:6]中,商店里各面值的硬币有足够多。在1次购物中希望使用最少硬币个数。例如,1 次购物需要付款0.55 元,没有5 角的硬币,只好用2*20+10+5 共4 枚硬币来付款。如果付出1 元,找回4 角5 分,同样需要4 ...原创 2011-08-25 19:19:54 · 622 阅读 · 0 评论 -
各种排序算法的C++实现与性能比较
排序是计算机算法中非常重要的一项,而排序算法又有不少实现方法,那么哪些排序算法比较有效率,哪些算法在特定场合比较有效,下面将用C++实现各种算法,并且比较他们的效率,让我们对各种排序有个更深入的了解。minheap.h 用于堆排序:view sourceprint?001 //使用时注意将关键码加入 002 #ifndef MINHEAP_H 003 #defi...原创 2011-08-25 19:21:34 · 353 阅读 · 0 评论 -
面试中常见的一些算法问题
Problem 1 : Is it a loop ? (判断链表是否有环?)Assume that wehave a head pointer to a link-list. Also assumethat we know the list is single-linked. Can you come up an algorithm to checkwhether this link li...原创 2011-08-25 19:22:51 · 144 阅读 · 0 评论 -
求平方根sqrt()函数的底层算法效率问题
我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢?虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间...原创 2011-08-25 19:23:43 · 197 阅读 · 0 评论 -
背包问题介绍与分析
背包问题是在1978年由Merkel和Hellman提出的。它的主要思路是假定某人拥有大量物品,重量各不同。此人通过秘密地选择一部分物品并将它们放 到背包中来加密消息。背包中的物品中重量是公开的,所有可能的物品也是公开的,但背包中的物品是保密的。附加一定的限制条件,给出重量,而要列出可能的物品,在计算上是不可实现的。背包问题是熟知的不可计算问题,背包体制以其加密,解密速度快而其人注目。但是,大多数...原创 2011-08-25 19:24:59 · 320 阅读 · 0 评论 -
整数拆分问题的动态规划解法
输入n,和k,问将n用1到k这k个数字进行拆分,有多少种拆分方法。例如:n=5,k=3 则有n=3+2, n=3+1+1, n=2+1+1+1, n=2+2+1, n=1+1+1+1+1这5种拆分方法。这个题目是个比较明显的动态规划,如果想不到是背包问题,也可以写出状态转移方程如下。用a[i][j]表示考虑到用数j进行拼接时数字i的拼接方法,可以得到状态转移方程如下:a[i][j]...原创 2011-08-25 19:26:02 · 1009 阅读 · 0 评论 -
堆排序(Heap Sort)算法学习
在程序设计相关领域,堆(Heap)的概念主要涉及到两个方面:一种数据结构,逻辑上是一颗完全二叉树,存储上是一个数组对象(二叉堆)。 垃圾收集存储区,是软件系统可以编程的内存区域。 本文所说的堆,指的是前者。堆排序的时间复杂度是O(nlgN),与快速排序达到相同的时间复杂度。但是在实际应用中,我们往往采用快速排序而不是堆排序。这是因为快速排序的一个好的实现,往往比堆排序具有更...原创 2011-08-25 19:26:49 · 167 阅读 · 0 评论 -
求解最大公约数问题
最大公因数,又称最大公约数。是指 [n(≧2)个自然数 a1, a2, ..., an] 的最大公因数。通常有两种表示方式:它们的所有公因数中最大的那一个; 如果自然数 m 是这 n 个自然数的公因数,且这 n 个数的任意公因数都是 m 的因数,就称 m 是这 n 个数的最大用因数。通常国内的记述方式为 [(a1, a2, ..., an)] ,国际通用的记号为 [g.c.d.(a1,...原创 2011-08-25 19:27:32 · 157 阅读 · 0 评论 -
数字1亿里面有多少个1呢
乍看这题真够唬人的,群里看到这个题目后争先恐后的说看法。最简单的办法不外乎就是遍历每个数,然后toString() 看看里面有多少个1,最后全部加起来,这是我们得到标准答案的办法。群里3个人写了3个笨方法都跑出来了,3个笨方法,呵呵 有意思,笨方法也不一样。 程序的实现真是变幻莫测。view sourceprint?01 var re = /1{1}/g; 02 ...原创 2011-08-25 18:52:19 · 650 阅读 · 0 评论 -
最大子序列、最长公共子串、最长公共子序列
最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序...原创 2011-08-25 18:33:20 · 112 阅读 · 0 评论 -
一道关于男女比例的面试题
阿里巴巴的一道面试题:说澳大利亚的父母喜欢女孩,如果生出来的第一个女孩,就不再生了,如果是男孩就继续生,直到生到第一个女孩为止,问若干年后,男女的比例是多少?刚看到问题是的思维逻辑:用递推法,假设一对夫妻,生了个女儿,就不再要了;另外一对夫妻,生了个儿子,再要一个,是女儿,然后也就不要了。第一感觉,应该是女的比男的多。然后思考如何证明这个结论。用数学可以证明,比如用归纳法,看看男女到底比例...原创 2011-08-25 16:56:12 · 663 阅读 · 0 评论 -
编程之美--BYTE二进制数中1的个数
书中提到五种解法,我也没想到其他方法了。1.除以2int Count(BYTE v){ int num = 0; while(v) { if(v % 2 == 1) {原创 2011-09-01 16:36:00 · 1339 阅读 · 0 评论 -
编程之美--不要被阶乘吓倒
问题描述:1. 给定一个整数N,那么N的阶乘N!末尾有几个0?2. 求N!的二进制表示中最低位1的位置。问题1思路和问题2思路一样,一个是求含有5的个数,一个是求含有2的个数。问题1思路:书中写到:一个数 N! = 2x x 3y x 5z…每对2和5相乘原创 2011-09-01 21:05:08 · 1392 阅读 · 0 评论 -
编程之美--重建二叉树
给定前序遍历和中序遍历结果,比如:前序:a b d c e f 中序:d b a e c f重建这颗二叉树。思路和步骤:1.前序遍历的第一个结点必然是要重建的这棵树的根节点。比如a就是当前序列的根节点。2. 在中序序列中找到a结点,把中序遍历结果分为两个序原创 2011-09-01 11:04:57 · 1635 阅读 · 1 评论 -
编程之美--寻找发帖水王
问题描述:Tango是微软亚洲研究院的一个试验项目。研究院的员工和实习生们都很喜欢在Tango上面交流灌水。传说,Tango有一大“水王”,他不但喜欢发贴,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子总数的一半。如果你有一个当前论坛上所有帖子(包括回帖)原创 2011-09-02 09:50:19 · 9891 阅读 · 10 评论 -
编程之美--寻找最大的K个数
方法一: 使用partition函数,将数组分为两组。partition函数是快速排序中用来把数组分成两部分的函数。 (1)分为两个组,sa和sb。 (2)若sa组的个数大于K,则继续在sa分组中找取最大的K个数字 。原创 2011-09-02 15:20:28 · 5826 阅读 · 3 评论 -
编程之美--1的数目
此题是典型的分析归纳法的运用。通过分析每个数的每个位为1由哪些因素组成,从而归纳总结出所有的数中1的出现规律,非常经典。没有其他更好的思路时,不妨针对个案展开分析,看看能不能找出规律,以以不变应万变。详细的分析归纳,不是我三言两语能表达的。还是直接看书吧。不过书中有个错误,以原创 2011-09-02 11:08:42 · 3139 阅读 · 4 评论 -
B树、B-树、B+树、B*树都是什么
原文:http://blog.csdn.net/manesking/archive/2007/02/09/1505979.aspxB树 即二叉搜索树:1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;转载 2011-09-06 11:24:09 · 1000 阅读 · 0 评论 -
编程之美——找符合条件的整数
转载自:http://blog.csdn.net/jcwKyl/article/details/3859155 。写的不错题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0.解决这个问题首先考虑对于任意的N,是否这样的转载 2011-09-07 08:49:37 · 953 阅读 · 0 评论 -
面试总结1
今天笔试了一家公司,感觉总体做的还不错。但是细节上还是有不少缺陷。特记录总结下,以免下次再犯。1.考优先级的。 这个比较有难度,我想了N久都想不起来。回来查了,也发现这根本背不下来,所以这题是做错了。2.考指针操作 这个是考基础知原创 2011-09-07 20:20:13 · 902 阅读 · 0 评论 -
华为一道机试题-操作系统任务调度问题
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 = 50且 例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -原创 2011-09-16 09:37:35 · 4865 阅读 · 0 评论 -
大数相乘
马上要找工作了,开始温习数据结构和算法了,今天想起来曾经写过的一道题,大数相乘。记得当时根本没有仔细想算法的实现细节,就是一行一行拼代码,凑出来的。今天仔细想了下,又上网搜了些资料,先发现此方法不错。还有其他几种解法,还没来得及细细琢磨。void CBigIntegerM原创 2011-08-20 17:01:44 · 931 阅读 · 0 评论 -
收藏(理解红黑树)
树型结构一直是一种很重要的数据结构, 我们知道二叉查找树BST提供了一种快速查找, 插入的数据结构. 相比散列表来说BST占用空间更小,对于数据量较大和空间要求较高的场合, BST就显得大有用处了.BST的大部分操作平均运行时间为O(logN), 但是如果树是含N个结点的线性链,转载 2011-08-22 10:51:49 · 1317 阅读 · 0 评论 -
为找工作练手--字符串倒置
今日写了字符串倒置的程序,非常简单。算法思路:1.把遍历字符串到中间位置2.把每个遍历到的字符与它要倒置的字符互换位置。程序如下:void reverseString(char *str){ assert(str != NULL); int length原创 2011-08-22 09:54:25 · 1550 阅读 · 2 评论 -
找工作练手--一道腾讯的笔试题
今日,在网上搜到一篇讲述在腾讯面经。里面有道题,考的是生产者消费者问题。题目如下:模拟线程间通信:线程A和B共用一块空间C[] space, 模拟一次线程间的通信:线程A生产一个C物品,并把它放入space中,线程B从space中取出该物品,并输出它的信息。题目很简单原创 2011-08-24 09:58:40 · 1096 阅读 · 0 评论 -
找工作练手--KMP算法理解
KMP算法讲解的实在太多了,各位作者为了它的严谨性,不惜花大量篇幅证明算法的正确性,也就用了很多公式去推导。曾经看了严蔚敏和唐宁九两位老师的,写的不错,花了不少时间。找工作在即,又花了点时间温习此算法,感觉比之前有了更多的感悟。此算法的精髓在于运用匹配字符串P的右移省却了源字原创 2011-08-26 15:59:44 · 920 阅读 · 0 评论 -
编程之美的诱惑
第1章 游戏之乐——游戏中碰到的题目1.1 让CPU占用率曲线听你指挥1.2 中国象棋将帅问题1.3 一摞烙饼的排序 1.4 买书问题1.5 快速找出故障机器1.6 饮料供货1.7 光影切割问题1.8 小飞的电梯调度算法1.9 高效率地安排见面原创 2011-08-30 21:59:43 · 999 阅读 · 0 评论 -
KMP快速字符串查找算法
在C/C++语言编程过程中,一般的字符串搜索操作都是通过标准库的strstr()函数来完成的,这在通常的情况下,因为字符串的搜索操作不多,并不会产生效率问题。实际上,这个函数的时间复杂度不容乐观。如果要从长度为n的字符串中查找长度为m的子字符串,那么这个strstr()函数的最坏时间复杂度为O(n*m),可见,随着子字符串长度m的增大,strstr()函数的时间复杂度也相应地成倍增加,有没有更加高...原创 2011-08-25 19:29:01 · 216 阅读 · 0 评论