算法及程序
文章平均质量分 69
SHForWork
这个作者很懒,什么都没留下…
展开
-
给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。先来个3*3816357492n奇数幻方口诀:1. 数字1放在第一行中间2. 依次放在上一个数的右上角2.1如果右边出去转载 2015-09-10 20:39:59 · 2562 阅读 · 0 评论 -
快速排序的非递归实现
转自http://www.cnblogs.com/zhangchaoyang/articles/2234815.html首先说明一下快速排序是对冒泡排序的改进。为什么这么说呢?想一下冒泡排序,它把序列分成了两部分,前半部分无序,后半部分升序排列,并且后半部分的数都大于前半部的数。由此可得到快速排序和冒泡排序的一些共同点:都要经历n趟排序每趟排序要经历O(n)次比较都是后转载 2015-07-03 18:53:41 · 494 阅读 · 0 评论 -
动态维护数列的中位数
转自 http://blog.sina.com.cn/s/blog_455b20c10100fmmb.html问题陈述:有个需要动态更新(插入或删除)的数列L,现在需要随时获取到该数列的中位数,请设计相应的数据结构和算法。 算法:令L的中位数为m,用一个大顶堆存储数列L中不大于m的元素(即L按从小到大排列时的前半部分),用一个小顶堆存储数列L中不小于m的元素(即L按从小转载 2015-07-26 12:42:45 · 811 阅读 · 0 评论 -
递归与尾递归总结
转自http://www.cnblogs.com/Anker/archive/2013/03/04/2943498.html递归与尾递归总结 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗转载 2015-07-03 19:49:09 · 492 阅读 · 0 评论 -
八大排序算法
转自http://blog.csdn.net/hguisu/article/details/7776068排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nl转载 2015-07-03 16:25:42 · 576 阅读 · 0 评论 -
Majority Element系列问题
1. Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the array is non-empty and the majority ele原创 2015-07-02 09:31:01 · 600 阅读 · 0 评论 -
背包问题的递归和非递归的解法
问题定义: 有一个背包重量是S,有n件物品,重量分别是W0,W1...Wn-1 。问能否从这n件物品中选择若干件放入背包中使其重量之和正好为S递归解法:bool BagProblem(vector w, int n, int s){if(s == 0)return 1;if(s 0 && n return 0;if(BagProblem(w, n-1, s原创 2015-06-11 16:47:10 · 987 阅读 · 0 评论 -
海量数据处理算法—Bloom Filter
转自http://blog.csdn.net/hguisu/article/details/78661731. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中。 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很转载 2015-06-05 19:49:01 · 559 阅读 · 0 评论 -
海量数据面试题----分而治之/hash映射 + hash统计 + 堆/快速/归并排序
http://blog.csdn.net/dazhong159/article/details/79071741、从set/map谈到hashtable/hash_map/hash_set 稍后本文第二部分中将多次提到hash_map/hash_set,下面稍稍介绍下这些容器,以作为基础准备。一般来说,STL容器分两种: 序列式容器(vector/list/d转载 2015-06-05 14:47:36 · 748 阅读 · 0 评论 -
leetcode之 Generate Parentheses(Catalan数)
转自http://blog.csdn.net/yutianzuijin/article/details/13161721描述:给定一个非负整数n,生成n对括号的所有合法排列。解答:该问题解的个数就是卡特兰数,但是现在不是求个数,而是要将所有合法的括号排列打印出来。 该问题和《编程之美》的买票找零问题一样,通过买票找零问题我们可以知道,针对一个长度为2n的合法转载 2015-06-25 11:38:07 · 476 阅读 · 0 评论 -
计数排序、桶排序和基数排序
转自http://blog.csdn.net/quietwave/article/details/8008572计数排序当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于转载 2015-07-05 10:49:56 · 467 阅读 · 0 评论 -
leetcode之 median of two sorted arrays
转自http://blog.csdn.net/yutianzuijin/article/details/11499917/首先假设数组A和B的元素个数都大于k/2,我们比较A[k/2-1]和B[k/2-1]两个元素,这两个元素分别表示A的第k/2小的元素和B的第k/2小的元素。这两个元素比较共有三种情况:>、证明也很简单,可以采用反证法。假设A[k/2-1]大于合并之后的第k小值,我们转载 2015-07-05 22:05:45 · 380 阅读 · 0 评论 -
面试算法题
转自http://www.cnblogs.com/zhenjing/archive/2010/10/18/1854020.htmlProblem 1 : Is it a loop ? (判断链表是否有环?)Assume that wehave a head pointer to a link-list. Also assumethat we know the list is sin转载 2015-09-10 13:59:29 · 754 阅读 · 0 评论 -
k链表翻转
k链表翻转。给出一个链表和一个数k。比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现。 ListNode* reverseKGroup(ListNode* head, int k) { if(head == NULL || k原创 2015-09-09 21:53:03 · 1447 阅读 · 0 评论 -
楼层扔鸡蛋问题
转自http://www.cnblogs.com/ltang/archive/2010/11/23/1885791.html==有限层数和蛋数,求即使最坏情况下需要的最少判断次数==两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见[两个鸡蛋--一道转载 2015-09-04 09:59:16 · 531 阅读 · 0 评论 -
利用后缀数组求最长的重复子串
后缀是指从某个位置 i 开始到整个串末尾结束的一个特殊子串,可表示为suffix[i]后缀数组是i从0变化到n-1,由suffix[i]所形成的数组。如字符串 banana该字符串产生的后缀数组为: suffix[0]:banana suffix[1]:anana suffix[2]:nana suffix[3]:ana原创 2015-08-05 09:34:20 · 773 阅读 · 0 评论 -
最长递增子序列(LIS)
转自http://www.ahathinking.com/archives/117.html最长递增子序列又叫做最长上升子序列;子序列,正如LCS一样,元素不一定要求连续。本节讨论实现三种常见方法,主要是练手。题:求一个一维数组arr[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6,-7中,最长递增子序列长度为4,可以是1,2,4,6,也可以是-1,2,转载 2015-08-03 15:21:03 · 558 阅读 · 0 评论 -
原地归并排序
转自http://blog.csdn.net/zhongkeli/article/details/8786694原地归并排序所利用的核心思想便是“反转内存”的变体,即“交换两段相邻内存块”,对于反转内存的相关文章,曾在文章“关于反转字符串(Reverse Words)的思考及三种解法”中对一道面试题做了分析。这一思想用到的地方很多,在《编程珠玑》中被称为“手摇算法”。通过手转载 2015-08-26 18:35:53 · 582 阅读 · 0 评论 -
统计1到n出现的1的个数(不能用字符串)
转http://blog.chinaunix.net/uid-8615291-id-2456793.html题目: 实现函数int func(unsigned n),其中n为正整数,返回从1到n(包含1和n)之间出现的1的个数,如func(13)=6,func(9)=1。(注意:不能将整数转化为字符串,剑指offer中的方法不能用) 分析:转载 2015-07-19 09:50:43 · 713 阅读 · 0 评论 -
Candy [leetcode] O(n)时间复杂度,O(1)空间复杂度的方法
对于ratings[i+1],和ratings[i]的关系有以下几种:1. 相等。相等时ratings[i+1]对应的糖果数为12.ratings[i + 1] > ratings[i]。在这种情况下,要寻找以ratings[i]开始的递增序列。3.ratings[i + 1] 对于任意一个递增序列 [2 3 4 5 6] 对应的糖果数为 [1 2 3 4 X]对于任意一个递减转载 2014-12-14 16:08:28 · 559 阅读 · 0 评论 -
寻找数组中的第二大数
转自http://m.blog.csdn.net/blog/xiyoukeke/6366197前几天得知腾讯招聘测试人员的笔试题中的一道附加题是寻找数组中的第二大数,故考虑其做法,在此在此做一小结。 找数组中的第二大数是一个查找过程,一般返回的应该是第二大数在数组中的位置,但若有其他用途,也可以返回该值是否找到的标志和它的真值。估有两种做法,但其基本思想都是用一转载 2015-08-11 20:53:23 · 674 阅读 · 0 评论 -
ELFHash算法解释
转自http://blog.chinaunix.net/uid-24683784-id-3061386.htmlELFhash函数在UNIX系统V 版本4中的“可执行链接格式”( Executable and Linking Format,即ELF )中会用到,ELF文件格式用于存储可执行文件与目标文件。ELFhash函数是对字符串的散列。它对于长字符串和短字符串都很有效,字符串中每个字符都有转载 2015-06-05 09:39:02 · 584 阅读 · 0 评论 -
LeetCode-Best Time to Buy and Sell Stock系列
Best Time to Buy and Sell Stock ISay you have an array for which the i th element is the price of a given stock on day i .If you were only permitted to complete at most one transaction (ie, b转载 2015-01-06 14:15:34 · 657 阅读 · 0 评论 -
最长回文子串
http://blog.csdn.net/kangroger/article/details/377426391、暴力法最容易想到的就是暴力破解,求出每一个子串,之后判断是不是回文,找到最长的那个。求每一个子串时间复杂度O(N^2),判断子串是不是回文O(N),两者是相乘关系,所以时间复杂度为O(N^3)。int FindLongestPalindrome1(s转载 2015-04-06 20:36:33 · 441 阅读 · 0 评论 -
leetcode 实现两个int整数相除(不用乘除,取余)
1. dividend=divisor*(a0*2^0+a1*2^1+...+an*2^n) 时间复杂度为logNint divide(int dividend, int divisor) {if(dividend == 0 || divisor ==0)return 0;if((dividend == INT_MIN) && (divisor == -1)) //溢出等于原创 2015-01-20 10:47:46 · 1591 阅读 · 0 评论 -
Floyd算法
正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B。所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查Dis(AX)转载 2014-12-28 21:44:41 · 440 阅读 · 0 评论 -
求所有最大公共子序列的算法实现
最近看了很多关于LCS(Longest common subsequence problem,最长公共子序列)的文章,大部分问题都只是求出最大公共子序列的长度,或者打印处其中的任意一个最大子序列即可,但是如何快速的打印出所有的最大长度子序列?这个问题好像看到的不多。本文给出了传统的DP(dynamic programming,动态规划)算法进行求解的过程,并用c语言实现。另外参考一篇论文实现了其中转载 2014-12-28 11:14:26 · 624 阅读 · 0 评论 -
面试中常问的关于链表的题目
链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文对链表相关的面试题做了较为全面的整理,希望能对找工作的同学有所帮助。链表结点声明如下:struct ListNode{ int m_nKey转载 2014-12-28 11:01:23 · 463 阅读 · 0 评论 -
拓扑排序
一、概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列,简称拓扑序列。注意: ①若将图中顶点按拓扑次序排成一行,则图中所有的有向边均转载 2014-12-28 14:29:44 · 510 阅读 · 0 评论 -
最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的转载 2014-12-28 11:15:36 · 577 阅读 · 0 评论 -
字符串的全排列和组合算法
全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢迎大家指出。首先来看看题目是如何要求的(百度迅雷校招笔试题)。一、字符串的排列用C++写一个函数, 如 Foo(const char *转载 2014-12-28 11:03:59 · 413 阅读 · 0 评论 -
使用递归和非递归方式反转单向链表
问题:给一个单向链表,把它从头到尾反转过来。比如: a -> b -> c ->d 反过来就是 d -> c -> b -> a 。分析:假设每一个node的结构是:[java] view plaincopyclass Node { char value; Node next; }转载 2014-12-28 11:03:20 · 373 阅读 · 0 评论 -
[leetcode] Trapping Rain Water
思路1:对某个值A[i]来说,能装的最多的水取决于在i之前最高的值leftMax[i]和在i右边的最高的rightMax[i],容水量即min(leftMax[i],rightMax[i]) – A[i]。:为了计算高度,第一遍从左到右计算数组leftMaxt,第二遍从右到左计算rightMax。时空复杂度都是O(n)。int trap(int A[], int n) {if(转载 2015-02-04 20:33:44 · 354 阅读 · 0 评论 -
经典算法总结之线性时间做选择
http://www.cnblogs.com/javaspring/archive/2012/08/17/2656208.html问题:输入:一个包含n个(不同的)数的集合A和一个数i, 1 输出:元素x∈A, 它恰大于A中其他的I – 1个元素(即求第k小数)。本博文中寻找最大的K个数(TOP K算法)这篇文章也用了本文中的算法,大家可以参考。转载 2015-03-15 20:16:47 · 2484 阅读 · 0 评论 -
约瑟夫环问题(循环链表)
转http://blog.csdn.net/wenhai_zh/article/details/9620847约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#include #include转载 2015-03-15 09:25:47 · 632 阅读 · 0 评论 -
对C++的整数数组进行洗牌
转自:http://blog.sina.com.cn/s/blog_6ae5ed170100q3jg.html本文要解决的问题是: 1. 给定一个整数数组,如何打乱该数组的顺序? 2. 如何确定算法的效率? 1. 算法的实现 《Beginning Microsoft Visual C# 2008》一书中有一种算法,我把它改写为C++的形式如下:转载 2015-04-11 14:46:56 · 1131 阅读 · 0 评论 -
二分查找及各种变化
转自http://www.cnblogs.com/wuyuegb2312/archive/2013/05/26/3090369.html本文以经典的二分查找为例,介绍如何使用循环不变式来理解算法并利用循环不变式在原始算法的基础上根据需要产生算法的变体。谨以本文献给在理解算法思路时没有头绪而又不甘心于死记硬背的人。 二分查找究竟有多重要?《编程之美》第2.16节的最长递增子序列转载 2015-04-06 15:16:04 · 598 阅读 · 0 评论 -
判断单链表是否存在环及求环入口点
转自http://www.cnblogs.com/ccdev/archive/2012/09/06/2673618.html算法描述:1、先判断是否有环设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为转载 2015-04-05 16:38:45 · 486 阅读 · 0 评论 -
计算字符串的相似度
转自http://www.cnblogs.com/suyang/archive/2009/08/03/1488201.html原文的问题描述: 许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”转载 2015-04-01 20:13:31 · 415 阅读 · 0 评论 -
Leetcode:Repeated DNA Sequences
转自:http://www.tuicool.com/articles/AnuQJjAhash table plus bit manipulation method(view the Show Tags and Runtime 10ms !)算法分析首先考虑将ACGT进行二进制编码A -> 00C -> 01G -> 10T -转载 2015-03-31 20:47:23 · 625 阅读 · 0 评论