Algorithms
GoRustNeverStop
这个作者很懒,什么都没留下…
展开
-
八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,原创 2015-03-04 22:25:55 · 770 阅读 · 0 评论 -
算法题:尾部的零
设计一个算法,计算出任意一个整数 n 的阶乘中尾部零的个数挑战 :O(logN)的时间复杂度格式:输入行第一行输入一个整数 n,最后输出阶乘尾部零的个数。样例输入11样例输出2转载 2017-12-22 16:32:24 · 318 阅读 · 0 评论 -
算法题:最小差
若给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[ i ],数组 B 中取 B[ j ],A[ i ] 和 B[ j ] 两者的差越小越好( | A[ i ] - B[ j ] | ),写一个函数返回最小差。挑战 :时间复杂度 O(n log n)格式:输入行输入两个整数数组 A 和 B,最后输出返回转载 2017-12-27 10:39:58 · 2341 阅读 · 0 评论 -
常用排序算法时间复杂度和空间复杂度
摘自维基百科: http://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95#.E7.A8.B3.E5.AE.9A.E6.80.A7在计算机科学所使用的排序算法通常被分类为:计算的时间复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n log n),转载 2017-12-27 14:50:57 · 767 阅读 · 0 评论 -
排序算法之 归并排序 及其时间复杂度和空间复杂度
排序算法之 归并排序 及其时间复杂度和空间复杂度在排序算法中快速排序的效率是非常高的,但是还有种排序算法的效率可以与之媲美,那就是归并排序;归并排序和快速排序有那么点异曲同工之妙,快速排序:是先把数组粗略的排序成两个子数组,然后递归再粗略分两个子数组,直到子数组里面只有一个元素,那么就自然排好序了,可以总结为先排序再递归;归并排序:先什么都不管,把数组分为两个子数组,一直递归把数组转载 2018-01-02 09:40:09 · 39768 阅读 · 2 评论 -
Manacher's Algorithm 马拉车算法
Manacher's Algorithm 马拉车算法这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这是非常了不起的。对于回文串想必大家都不陌生,就是正读反读都一样的字符串,比如 "bob", "level", "noon"转载 2018-01-31 14:17:14 · 530 阅读 · 0 评论 -
[leetcode]647. Palindromic Substrings
Given a string, your task is to count how many palindromic substrings in this string.The substrings with different start indexes or end indexes are counted as different substrings even they consis原创 2018-01-31 15:28:01 · 410 阅读 · 0 评论 -
KMP算法最浅显理解——一看就明白
KMP算法最浅显理解——一看就明白说明KMP算法看懂了觉得特别简单,思路很简单,看不懂之前,查各种资料,看的稀里糊涂,即使网上最简单的解释,依然看的稀里糊涂。 我花了半天时间,争取用最短的篇幅大致搞明白这玩意到底是啥。 这里不扯概念,只讲算法过程和代码理解:KMP算法求解什么类型问题字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 如下面两个字符串...转载 2018-01-25 13:19:18 · 479 阅读 · 1 评论 -
KMP算法
KMP KMP算法可以说所有数据结构书上都有,上大学的时候也陆陆续续学过三次,每次学完看似理解了,可是过了不到半年又忘记了,或许是因为代码太短,能写出来就以为自己会了,没有深入去理解,导致下次再来看的时候感觉很陌生,一定是这样的。 今天看了matrix67对KMP的解释,很赞,附上地址:http://www.matrix67.com/blog/archives/转载 2018-01-10 14:13:39 · 593 阅读 · 0 评论 -
KMP算法详解
来自Matrix67KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="mat转载 2018-01-10 14:14:55 · 292 阅读 · 0 评论 -
最长公共子序列问题(不要求连续)
下面这篇文章介绍一下在算法设计中动态规划的最长公共子序列的问题。最长公共子序列问题所谓,也即是分别给出长度为n和m的字符串A,B,然后找出其中最长公共子序列的最优值和最优解。所谓最优值,也就是求出这个最长公共子序列的长度;而最优解,就是要求出这个最长最长公共子序列是什么的问题。给个不太恰当的例子:我们中学数学中经常会遇到求函数最值的问题,比如说求出函数 f(x) 的最大值,那么这个转载 2018-01-27 15:10:22 · 884 阅读 · 0 评论 -
Longest Palindromic Substring Part II
Longest Palindromic Substring Part IINovember 20, 2011 by 1337c0d3r 158 RepliesGiven a string S, find the longest palindromic substring in S.Note:This is Part II of the article转载 2018-02-06 15:34:09 · 270 阅读 · 0 评论 -
Golang以OO的方式实现二叉查找树
二叉查找树是一种满足如下性质的二叉树:(1) 某个节点的左子树中的所有节点的值都比这个节点的值小(2) 某个节点的右子树中的所有节点的值都比这个节点的值大下面有Go实现的非常详尽的代码,采用了Go风格的OO进行了封装。代码中主函数的例子的参照图如下:这是我的二叉查找树的使用手册:[cpp] view转载 2017-11-20 10:41:19 · 345 阅读 · 0 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。转载 2017-08-09 16:52:43 · 450 阅读 · 0 评论 -
[leetcode]爬楼梯的递归和非递归方法
【Description】You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?【分析】利用枚原创 2015-05-18 23:31:00 · 4336 阅读 · 0 评论 -
快排算法
void QuickSort(int *a, int n){ if (n int L = 0; int R = n - 1; int temp = a[0]; while (L { while (L = temp) --R; a[L] = a[R]; while (L原创 2016-07-29 17:17:11 · 616 阅读 · 0 评论 -
二分搜索错误情况的分析
又到了一年一季的招聘季,二分搜索是一个烂大街的题目,相信会写的人不少,当你能真正知道错误写法到底错在哪里吗?错误一,因结束条件判断错误,数组中明明存在key,但程序却却找不到。public static int binary_search(int [] array, int key, int begin, int end) { int mid; wh转载 2016-08-01 21:06:35 · 551 阅读 · 0 评论 -
sqrt函数实现
我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢?虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次拿中间数的平方来试验,如果大了,就再试左区间的中间转载 2016-08-01 21:29:32 · 5450 阅读 · 1 评论 -
堆排序(大根堆)
堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶转载 2016-08-03 00:18:57 · 1158 阅读 · 0 评论 -
Hash表
Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。1.Hash表的设计思想 对于一般的线性表,比如链表,转载 2016-08-18 17:58:14 · 581 阅读 · 0 评论 -
哈希表总结
哈希表的概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。散列存储的基本思路 以数据中每个元素的关键字K为自变量,通过散列函数H(k)计算出函数值,以该函数值作为一块转载 2016-08-08 00:03:16 · 493 阅读 · 0 评论 -
哈希表详解
先来看一个TopK题目: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。 如何解答?Topk之前已经说过,寻找转载 2016-08-08 00:04:11 · 2076 阅读 · 1 评论 -
从头到尾彻底解析哈希表算法
说明:本文分为三部分内容,第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。第一部分:Top K 算法详解问题描述百度面试题:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千转载 2016-08-08 00:16:08 · 1996 阅读 · 0 评论 -
Linux下map、hash_map和unordered_map效率比较
原理介绍map介绍Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部转载 2016-08-22 23:12:45 · 2283 阅读 · 0 评论 -
[LeetCode题解]从两个有序数组的并集中寻找第k小元素
Given two sorted arrays A, B of size m and n respectively. Find the k-th smallest element in the union of A and B. You can assume that there are no duplicate elements.不得不承认这道题目解决起来非常的巧妙。像大多数难题一样转载 2016-08-22 23:20:27 · 5943 阅读 · 0 评论 -
[回溯算法] 五大常用算法之回溯法
算法入门6:回溯法一. 回溯法 – 深度优先搜素 1. 简单概述 回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。基本思想类同于:图的深度优先搜索二叉树的后序遍历 【 分支限界法:广度优先搜索 思想类同于:...转载 2018-02-12 14:40:46 · 223174 阅读 · 17 评论