
算法
文章平均质量分 80
vincent-xia
这个作者很懒,什么都没留下…
展开
-
求两个年份之间闰年的数目
最开始碰到的是这个问题,求给定的两个数之间能同时被2,3,5整除的数,可以发现如果一个数能同时被2,3,5整除,那么它肯定可以被30整除。我们可以编写一个函数判断一个数是否可以被30整除,然后遍历给定的两个数中的区间逐个地判断就可以了。//解法一bool isNums(int num){ if(num%30==0) return true; return false;}原创 2015-08-31 18:59:42 · 8663 阅读 · 2 评论 -
火车进站问题
描述给定一个正整数N代表火车数量,0知识点栈运行时间限制0M内存限制0输入有多组测试用例,每一组第一行输入一个正整数N(0输出输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。样例输入3原创 2015-08-31 15:20:31 · 3512 阅读 · 0 评论 -
二叉树遍历的应用(路径和问题,判断是否是二叉搜索树,判断是否是二叉平衡树)
现在越发觉得关于树的问题真是千变万化,随便改一个条件又会是一个新的问题。问题:一棵二叉树每个节点包含一个整数,请设计一个算法输出所有满足条件的路径:此路径上所有节点之和等于给定值。注意此类路径不要求必须从根节点开始。如果没有最后一个条件,这道题在leetcode上面过,就是采取先序遍历的方式并记录下路径。但是加上最后一个条件后需要转下弯思考一下。当然也需要记录下原创 2015-08-25 20:53:22 · 1740 阅读 · 0 评论 -
网页词频统计工具
阅读英文文章时有时会出现不少这篇文章专有的一些单词,这些单词在其他地方不太可能会使用到,但是在阅读这篇文章时使用的频率可能会比较大,于是想能不能做一个工具,当你给定文章的url时,它将这篇文章中出现次数较多的那些单词统计出来。这样当你把这些单词的意义搞明白,在读这篇文章会不会压力小很多?那么做这个工具的思路如下:首先必须能够根据给定的url获取网页的正文信息或者网页的html文件;原创 2015-08-18 17:18:33 · 8818 阅读 · 1 评论 -
大整数的加法和乘法运算
C和C++中整数最大只能表示10位,不能就会溢出,所以出现了如何避免整数溢出的问题。其中一个方法就是使用字符串来表示,使用字符串的长度是没有限制的。使用字符串表示整数然后进行乘法运算的关键有如下几点:被乘数和乘数相乘时最开始不处理进位,而是每一位相乘的计算结果都是用整数来保存第一步计算完毕之后从低位到高位开始处理进位不难发现保存计算结果的整型数组的长度是被乘数的长度和乘数的原创 2015-08-18 11:08:02 · 5504 阅读 · 1 评论 -
使用逆波兰式进行表达式求值
中缀表达式及后缀表达式图解中说明了使用逆波兰式进行表达式求值的方法,这里使用C++进行实现。实现和原理讲解有一点不同,需要进一步进行细化。关于将中缀表达式转换成后后缀表达式的规则:规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈原创 2015-08-13 23:12:39 · 5951 阅读 · 1 评论 -
中缀表达式及后缀表达式图解
平常我们见到的四则运算表达式都是中缀表达式,这种表示方法适合人阅读,但是不适合计算机计算,因为乘除号出现在加减号的后面时可能要先计算后面的加减号,加上括号后就更加麻烦了。计算机可以通过逆波兰式来非常方便的实现计算。计算机实现四则运算主要分两步进行:将给定的中缀形式的表达式转换成后缀表达式形式利用后缀表达式执行计算下面是上面两个步骤的图解过程(这实际上是《大话数据结构》一书中的图转载 2015-08-13 22:34:58 · 8554 阅读 · 0 评论 -
合唱队
描述计算最少出列多少位同学,使得剩下的同学排成合唱队形说明:N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1Ti+1>......>TK。 你的任务是,已知所有N位同学的身高,计算最少需要几位同原创 2015-08-07 20:56:50 · 875 阅读 · 0 评论 -
赫夫曼(Huffman树
转载自:http://blog.163.com/zhoumhan_0351/blog/static/3995422720098275836215/一、基本概念1、赫夫曼(Huffman)树又称最优二叉树或最优搜索树,是一种带权路径长度最短的二叉树。在许多应用中,常常赋给树中结点一个有某种意义的实数,称此实数为该结点的权。从树根结点到该结点之间的路径长度与该结点上权的乘积称为结点的带转载 2015-07-28 10:38:33 · 764 阅读 · 0 评论 -
四叉树与八叉树
转载自:http://blog.youkuaiyun.com/zhanxinhang/article/details/6706217前序四叉树或四元树也被称为Q树(Q-Tree)。四叉树广泛应用于图像处理、空间数据索引、2D中的快速碰撞检测、存储稀疏数据等,而八叉树(Octree)主要应用于3D图形处理。对游戏编程,这会很有用。本文着重于对四叉树与八叉树的原理与结构的介绍,帮助您在脑海中建转载 2015-07-28 10:07:02 · 958 阅读 · 0 评论 -
最大堆及其操作函数
前几天在做Kth Largest Element in an Array 时使用到了堆,通过那倒题目也了解到了堆的make_heap,push_heap,pop_heap操作,看了C++ reference中的讲解也明白了heap_sort是什么回事。于是想着自己实现以下这四个函数。 堆的定义:任意节点小于它的所有后裔,最小元在堆的根上(堆序性)。堆总是一棵完全树。#include <ios原创 2015-07-14 15:44:25 · 1273 阅读 · 0 评论 -
二叉树前序遍历非递归写法
转载自:http://blog.youkuaiyun.com/zhangxiangdavaid/article/details/37115355前言在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的:转载 2015-07-14 09:36:52 · 1330 阅读 · 0 评论 -
Catalan数计算及应用
转载自:http://blog.youkuaiyun.com/wuzhekai1985/article/details/6764858问题描述:卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。输入一个整数n,计算h(n)。其递归式如下:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2,h(0) = h(1) = 1)转载 2015-07-07 14:21:04 · 642 阅读 · 0 评论 -
Trie树
翻译自topcoder中的一篇文章:https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/简介有很多种算法和数据结构可以用来在文本中建立字符串的索引和对字符串进行查找,一些已经被包含在了标准库中,一些还没有。Trie这种数据结构是一个还没有被包含在标准库中的一个很好的例子。假设word表示翻译 2015-07-03 15:41:51 · 1165 阅读 · 0 评论 -
回溯法(1)
转自:http://www.cnblogs.com/chinazhangjie/archive/2010/10/22/1858410.html回溯法1、有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。2、回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。3、回转载 2015-07-02 15:48:10 · 750 阅读 · 0 评论 -
动态规划:从新手到专家
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。很好的一篇文章,没事的话可以看看这篇文章加深对动态规划的理解。前言转载 2015-07-02 09:51:30 · 479 阅读 · 0 评论 -
二叉搜索树的后序遍历
给定一个整型数组,判断这个数组是否可能是一棵二叉搜索树后续遍历的结果?由于二叉搜索树的特性,任何一个节点它的左子树中的节点都比这个节点值小,右子树中的节点都比这个节点值大,那么经过后续遍历后的数组应该有一个特性,就是数组中前面一部分元素比最后一个元素值小,后面那部分元素值都比最后一个元素值大。并且前面这部分元素和后面这部分元素也符合同样的规律,根据这个特性,可以用递归求解。如下图:原创 2015-05-04 16:32:01 · 792 阅读 · 0 评论 -
字符串排列与八皇后问题
字符串排列问题:输入一个字符串,输出该字符串的所有排列。如输入abc,则输出abc,acb,bca,caab,cba.根据排列组合的知识,3个字符串的排列有3!=6个。这道题原创 2015-05-04 11:20:41 · 1177 阅读 · 0 评论 -
连续子数组的最大和问题及其变化
输入一个整型数组,数组中有正数也有负数。数组中的一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。如输入{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},输出应该是18这是在《剑指offer》上看到的题目,这道题可以在O(n)的时间复杂度内求解,而且这个问题可以是很多更加复杂问题的子问题。所以记录加深下印象。分析:以上面列出的{1,原创 2015-05-01 16:30:31 · 720 阅读 · 0 评论 -
8中常见的排序算法
#include #include #include //冒泡排序void boblesort(int * arr,int n);//插入排序void insertsort2(int *arr,int n);//希尔排序void shellsort2(int *arr,int n);//选择排序void selectsort(int *arr,int n);//归并排序v原创 2015-03-24 17:09:40 · 1203 阅读 · 0 评论 -
不同高度墙的盛水问题两种算法C++实现
题目在伯乐在线中看到的,据说是twitter面试时的题目,感觉蛮有意思的。于是就将两种算法都用C++实现了,就当练练手吧。“在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]” “假如开始下雨了,那么墙之间的水坑能够装多少水呢?”“以1×1的方块为单位计算原创 2013-11-02 16:41:38 · 3600 阅读 · 2 评论 -
8种常见的排序算法
这是不知道什么时候看网上看到的一篇文章,非常形象地描述了常见的8种排序算法,没有对应的实现,但是对于理解这几种算法有很大帮助,记录在这儿方便查询。1、直接插入排序(1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2]个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例转载 2013-10-22 11:19:26 · 1266 阅读 · 0 评论