
Algorithm
文章平均质量分 53
onyas
这个作者很懒,什么都没留下…
展开
-
二分查找
#include #include int bisearch(char** arr,int b,int e,char* v){ int minIndex=b,maxIndex=e,midIndex; while(minIndex<maxIndex-1) { midIndex = minIndex +(maxIndex-minIndex)/2;//防止数据溢出 if(strcmp原创 2013-04-30 10:58:43 · 711 阅读 · 0 评论 -
经典算法题每日演练——第五题 字符串相似度
原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2765633.html 这篇我们看看最长公共子序列的另一个版本,求字符串相似度(编辑距离),我也说过了,这是一个非常实用的算法,在DNA对比,网页聚类等方面都有用武之地。一:概念 对于两个字符串A和B,通过基本的增删改将字符串A改成B,转载 2015-09-24 22:31:57 · 611 阅读 · 0 评论 -
求子数组的最大和
动态规划 求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。ANSWER: A traditi原创 2015-09-24 22:24:05 · 517 阅读 · 0 评论 -
动太规划问题
包问题01背包: 有N件物品和一个重量为M的背包。(每种物品均只有一件)第i件物品的重量是w[i],价值是p[i]。求解将哪些物品装入背包可使价值总和最大。完全背包: 有N种物品和一个重量为M的背包,每种物品都有无限件可用。第i种物品的重量是w[i],价值是p[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大。多重背包: 有N种物品和一个重量为M的背包。第i种物品最转载 2015-09-24 22:39:10 · 437 阅读 · 0 评论 -
最长递增子序列(LIS)
文章作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathinking.com) 转载请注明,谢谢合作。---最长递增子序列又叫做最长上升子序列;子序列,正如LCS一样,元素不一定要求连续。本节讨论实现三种常见方法,主要是练手。题:求一个一维数组arr[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6,-7中,最转载 2015-10-09 11:44:56 · 489 阅读 · 0 评论 -
最长不重复子串
文章作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathinking.com) 转载请注明,谢谢合作。---题:从一个字符串中找到一个连续子串,该子串中任何两个字符不能相同,求子串的最大长度并输出一条最长不重复子串。本节从最直接的方法逐步优化,渐进探索了四种实现方式,并最终找到时间复杂度为O(N),辅助空间为常数的方案,内容如下:转载 2015-10-09 11:46:44 · 1584 阅读 · 0 评论 -
一个数组的值先从小到大递增后从大到小递减,找出最大的值
问题:给定一个数组,其值先从小到大递增后从大到小递减,找出最大的值。思路:最简单的办法就是从第二个值开始,判断是否满足 A[i] > A[i-1] && A[i] > A[i+1]. 如果满足,i 就是那个最大值的下标。该算法复杂度为O(n).我们可以改进这种算法,因为这个数组是排好序的,所以我们可以利用二分查找的思想,更快速的找到最大值,时间复杂度为O(lg转载 2015-10-11 09:54:32 · 2038 阅读 · 0 评论 -
Leetcode 4 Median of Two Sorted Arrays
今天发现了leetcode上面一道题,觉得非常经典,记录之。题目是这样的:给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素。另外一种更加具体的形式是,找到所有元素的中位数。本篇文章我们只讨论更加一般性的问题:如何找到两个数组中第k大的元素?不过,测试是用的两个数组的中位数的题目,Leetcode第4题 Median of Two Sorted Arrays方案1转载 2015-10-13 10:20:33 · 563 阅读 · 0 评论 -
N-Queens -- LeetCode
N-Queens -- LeetCode转载 2016-04-12 08:58:38 · 409 阅读 · 0 评论 -
树状数组及其应用
树状数组转载 2016-04-11 09:28:28 · 2914 阅读 · 0 评论 -
用位运算实现求绝对值-有效避开if-else判断
By SmartPtr(http://www.cppblog.com/SmartPtr/)一般情况下,如果要我们写一个求绝对值的函数,我们的实现很有可能会是这样:templateclass T>T abs_Normal(T tNum){ if(tNum > 0.0) return tNum; else retu转载 2017-05-06 12:36:24 · 7055 阅读 · 0 评论 -
从一百个数中找不存在的数
这个题目应该出现过了,使用异或运算应该是最快的方法了,加法也可以,但是加法应该比不上逻辑运算的速度。。(另外我也想求求关于现代CPU执行 加法的需要多少时钟周期, 逻辑异或需要多少时钟周期 ? 的干货 )首先得到 1-100 这些数字异或后得到的数字 Y= 1^2^..^100,使用循环99次得到.然后用着Y 去异或那个99个数的数字, 最后Y里保存的就是缺失了的数字。 也是99次原创 2017-08-01 22:17:06 · 1873 阅读 · 0 评论 -
single number系列
single number1只有一个出现过一次,其他出现过两次,全部异或得结果single Number3这道题是之前那两道Single Number 单独的数字和 Single Number II 单独的数字之二的再次延伸,说实话,这类位操作Bit Manipulation的题,如果之前没有遇到过类似的题目,楞想是很难相出来的,于是我只能上网搜大神们的解法原创 2017-08-01 22:29:02 · 521 阅读 · 0 评论 -
递归练习
全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷校招笔试题)。一、字符串的排列用C++写一个函数, 如 Foo(const char *转载 2015-06-28 18:33:25 · 1829 阅读 · 0 评论 -
全排列算法(字典序,递归实现)
字典序算法如下: 设P是1~n的一个全排列:p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn 1)从排列的右端开始,找出第一个比右边数字小的数字的序号j(j从左端开始计算),即 j=max{i|pi 2)在pj的右边的数字中,找出所有比pj大的数中最小的数字pk,即k=max{i|pi>pj}(右边的数从右至左是递原创 2014-09-14 22:18:29 · 1861 阅读 · 0 评论 -
字典树(讲解+模版)
字典树(讲解+模版)又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。 字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一转载 2015-04-08 20:51:55 · 528 阅读 · 0 评论 -
字符串匹配的KMP算法
原文地址下载有关字符串匹配算法的文档(包括蛮力法,KMP,BM,RK算法,DFA)---------------------------------------------------------------------------------------------------------------------字符串匹配是计算机的基本任务之一。举例来说,原创 2013-05-02 09:09:07 · 996 阅读 · 2 评论 -
字符串匹配的Boyer-Moore算法
原文地址参考链接上一篇文章,介绍了KMP算法。但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。原创 2013-05-03 22:32:21 · 781 阅读 · 0 评论 -
24点算法
/* 给定四个数,计算这四个数(1-13)的'+','-','*','/'能不能得到24(占时只实现满足一种情况就打印) 方法:穷举法 思路:有两种方式,(1)"连贯式计算"(2)"分隔式计算" (1)连贯式计算、例如对于2+4*3+5的计算,2+4=6 => 6*3=18 => 18+5=23 (2+4)*3+5 (2)分隔式计算、例如对于2+4*3+5的计算,2+4=6 => 3原创 2013-05-17 23:27:36 · 972 阅读 · 0 评论 -
Catalan数
卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 244662670原创 2013-05-05 22:56:48 · 1096 阅读 · 0 评论 -
Catalan数的应用与代码实现
ACM中出现的Catalan数与大数结合使用http://acm.hdu.edu.cn/showproblem.php?pid=1023Problem DescriptionAs we all know the Train Problem I, the boss of the Ignatius Train Station want to know if all the原创 2013-05-07 10:00:39 · 1004 阅读 · 0 评论 -
子集树与排列树
当所给问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间称为子集树。子集树通常有2^n个叶结点。例如:n个物品的0-1背包问题所相应的解空间是一棵子集树,遍历子集树的算法通常需要(2^n)计算时间。当所给问题是从n个元素的集合S中找出满足某种性质的排列时,相应的解空间为排列树。排列树通常有n!个叶结点。因此遍历排列树需要增加(n!)计算时间。例如:旅行售货员问原创 2013-05-26 23:48:07 · 2261 阅读 · 0 评论 -
计算n以内的数字0到9分别出现的次数
学习原创 2013-05-27 23:09:57 · 1829 阅读 · 0 评论 -
幻方的计算
/* 幻方的计算: 计算任意阶数幻方的各行、各列、各条对角线上所有数的和的公式为:sum=n*(n^2+1)/2 n为阶数 幻方分为奇阶幻方和偶阶幻方 一、当n为奇数时称为奇阶幻方 1、Merzirac法生成奇阶幻方 在第一行居中的方格内放1,依次向右上方填入2、3、4…,如果右上方已有数字,则向下移一格继续填写。 2、loubere法生成奇阶幻方 在居中的方格向上一原创 2013-06-02 14:52:07 · 14135 阅读 · 0 评论 -
简单排序算法
1、冒泡排序将相邻两个数比较,将小的数调到前头(0的位置)。如果有n个数,则要进行n-1次比较,在第一趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。每一趟过完都能确定一个当前剩下数的位置。对n个数进行冒泡排序:代码实现:void sort(int a[],int n){ int i,j,t; for(int i=0;i<n-1;i++)原创 2013-09-21 17:09:00 · 955 阅读 · 0 评论 -
堆排序的实现
/* 堆排序的最坏时间复杂度为O(nlogn)。堆序的平均性能较接近于最坏性能。 由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。 堆排序是就地排序,辅助空间为O(1) 它是不稳定的排序方法。*/#include // array是待调整的堆数组,i是待调整的数组元素的位置,nlength是数组的长度//本函数功能是:根据数组array构建大根堆void He原创 2013-06-03 12:46:16 · 712 阅读 · 0 评论 -
Trie树:应用于统计和排序
1. 什么是trie树 1.Trie树 (特例结构树) Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是转载 2015-04-08 21:32:02 · 612 阅读 · 0 评论 -
经典算法题每日演练——第四题 最长公共子序列
http://www.cnblogs.com/huangxincheng/archive/2012/11/11/2764625.html一: 作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。二:概念 举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个,转载 2015-04-10 10:52:51 · 551 阅读 · 0 评论