Algorithm
文章平均质量分 84
QuinnNorris
蚂蚁金服 - 开发工程师
展开
-
java算法(一)——初级排序算法
程序=数据结构+算法。对于那些构建项目的框架不是由我们来编写的,真正能判断一个项目的水平高低的是我们在其中自定义的数据结构是否方便、简洁、耦合度低;我们实现这些方法的算法是否快速、有效、不易出错。如果你想做的不是那种每天从早干到晚的搬砖工作,学会算法、品析数据结构绝对是你增长水平的必经之路。(一)排序算法算法和编程语言关系是紧密的,但又不仅仅只依赖于某种语言。在不考虑实现语言的情况下,我们通常有以下原创 2017-02-21 20:58:48 · 1557 阅读 · 0 评论 -
java manacher算法计算最长回文字符串
求解最长回文字符串朴素算法最朴素的算法是暴力解法就不谈了,时间复杂度是O(n3)。比最朴素解法稍微好一些的解法是O(n2)的一种解法,思路是从对称轴开始考虑,根据回文字符串长度的奇偶分为两种情况,如果最长的回文字符串为偶数位,那么他的对称轴是中间部分,如果是奇数位则为中间的一个字符。那么从该字符串的第一个字符开始一共有n+(n-1)个对称轴,每个对称轴都需要便利一遍n来找最长的回文字符串,所以算法复原创 2017-09-11 19:31:03 · 1089 阅读 · 0 评论 -
java 最快获取最小前K个数
从一列n个数字中取最小的前k个数字。这是一个面试经常会问到问题,回答这个问题并不难,但是如何能分析出最优的算法,能够分析出多少种算法,这会是面试官真正感兴趣的问题。这里总结一下这个问题的所有解法与复杂度。1. 快速排序法 O(N*logN)最简单直接的方法就是快速排序+返回前k个数字。快速排序是复杂度为N*logN的算法,而查找前k个数字需要是时间复杂度为O(K)。总体的时间复杂度为O(N*logN原创 2017-08-29 20:03:02 · 3065 阅读 · 0 评论 -
java 动态规划策略原理及例题
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。动态规划定义动态规划实际上是一类题目的总称,并不是指某个固定的算法。动态规划的意义就是通过采用递推(或者分而治之)的策略,通过解决大问题的子问题从而解决整体的做原创 2017-08-22 19:44:32 · 16888 阅读 · 4 评论 -
java 最长公共子序列(LSC)问题
题目: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)举例: Str1 Str2 resultStr abciba abdcab abca abc bca bc accb caac cc思路:这道题连暴力求解的欲望都没有,如果不用动态规划来做,暴力求解的时间级要到指数级别。那么对于这道题的思路,我们先用dp求出子序列状态数原创 2017-08-07 14:46:54 · 1134 阅读 · 0 评论 -
java 欧拉定理及原根的计算
java很少要用到非常复杂的算法,因为这门语言被创建就不是为了表述数学概念或是计算算法的。但有很多知识已经更偏向于算法概念,而且我们必须掌握。因为如果你一点都不了解,当面试官问你有关数论的问题的时候你只能说“不会”,如果你掌握了一些基础概念,做简单数论题目不会太费力,但是如果你对同余、原根、欧拉函数、扩展阿基米德、贝祖等式这些概念一点了解都没有,那你连思考的权利都没有了,当别人飞快的打代码时,你连题原创 2017-08-24 18:48:04 · 3652 阅读 · 1 评论 -
2017百度之星资格赛 1003 度度熊与邪恶大魔王
#include #include #include #include using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; ll a[120000],b[120000]; ll k[1200],p[1200]; ll dp[1200][22];int m原创 2017-08-05 18:46:13 · 1235 阅读 · 0 评论 -
LeetCode 461 617 500 476 575 637
461. Hamming Distance描述: The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Given two integers x and y, calculate the Hamming distance原创 2017-07-26 09:29:26 · 489 阅读 · 0 评论 -
java MD5(Message Digest Algorithm 5)加密算法
在工作项目中,我们接受用户的个人信息和类似账号密码此类数据时必须对其进行加密,否则可能会导致信息的泄露引发安全性问题。加密的方式有很多种,其中较为常用的加密方式是MD5加密算法和SHA-1加密算法,这两种算法中MD5较为常用。MD5用于确保信息传输完整一致,是一种计算机广泛使用的哈希算法,主流编程语言普遍已有MD5实现。MD5算法MD5是一种通过固定的算法将任意位长的数据转化为固定长度128位(16原创 2017-07-04 18:53:39 · 1841 阅读 · 0 评论 -
java 效率极高的查询数据结构——SkipList 跳表
前一阵子和朋友聊天,他和我讲在面试中被问到跳表。当时我也很迷从来没听说过跳表,赶快学习了一下,学习了之后才发现这个数据结构不是很难,而且效率非常高,在平均情况下查找的时间复杂度约为O(log n)堪比平衡树。而且具体的数据结构的实现也非常有趣。SkipList 跳跃列表原理跳跃列表是一种由多条链表组合而成的允许快速查询有序元素的数据结构。跳跃列表中的每条链表表示一个层,每一层存在的元素都是前一层(前原创 2017-07-01 11:21:23 · 4643 阅读 · 0 评论 -
java 算法时间计算与优化方法
随着使用计算机的经验的增长,人们在使用计算机编写程序的时候,不可避免的会发出这样的疑问: 我的程序运行一次需要多久? 我的代码是否可以再优化得更快更节省空间?当我们打开一个网页或者传输一个文件或打开一个播放器时,你也肯定问过自己上面的问题。但是在这种情况下估计时间和数据处理的复杂度太难太模糊了。相比较这种大型应用,我们能够处理的是单个程序的复杂度和效率。如果每片程序的效率都是相对较优的,原创 2017-04-25 14:28:20 · 3277 阅读 · 1 评论 -
java——二叉查找树(BST)算法
现代计算机和网络使我们能够访问海量的信息。高效检索这些信息的能力是处理他们的重要前提。二叉查找树(Binary Search Tree)是一种能将链表插入的灵活性和有序数组查找的高效性结合起来的优良算法。原创 2017-05-03 15:46:22 · 1726 阅读 · 0 评论 -
java面试必问——六大排序算法
六大排序方法java中有很多中排序方法,其中冒泡排序过于简单,基数排序主要用于研究我们这里不讨论。实际应用和面试中,最常问到的就是下面的六种排序方法,我们将从原理,复杂度,稳定性和实际应用几个方面来讨论他们。原创 2017-05-01 15:13:20 · 4220 阅读 · 5 评论 -
并行排序算法——时间复杂度O(n)的排序法
最近老师讲了并行的排序算法,让我对这个原来不是很了解的排序算法产生了浓厚的兴趣。并行排序方法,是指采用并行计算的方法对一组数据进行排序,理论上是在类似内排序的环境下,采用多核并行的方法让时间降低,排序的复杂度最好的情况下能降低至O(n)左右。排序的实质排序的实质是什么?这是一个不是问题的问题。我们可以说是让所有的数都按照一定的规则被放置,但这种说法实际上是解释了排序的汉字含义。换句话不如说排序是:从原创 2017-11-30 21:10:52 · 15297 阅读 · 0 评论