算法题
will的猜想
这个作者很懒,什么都没留下…
展开
-
动态规划法求解矩阵最长路径问题
题目描述:有一个m×n的矩阵,现要从左下角走到右上角,并且方向只能是向上或者向右,现规定一条路径的权值为走此路径所经过的值的和。给定一个矩阵,请找出权值最大的一条路径。Example:2 5 63 9 47 9 1所找到的路径为7->9->9->5->6,权值为36。首先我们来介绍一下动态规划的思想: 动态规划程序设计中,我们主要利用了问题的原创 2016-09-03 11:51:47 · 11066 阅读 · 0 评论 -
给一个有序数组和一个数s,求数组中两数和等于s的组合
题目:已知一个有序递增的数组array和一个数s,请找出两个数字之和等于s的两个数。如果右多个这样的组合,则只需要输出一个就行。例如,如果数组array={1,2,4,7,11,15},数s=15,请输出4和11,因为4+11=15分析:首先我们会想到肯定要遍历这个数组,我们都知道不管你利用那种算法遍历,最坏情况下最好的时间复杂度都是O(n)。也就是遍历一次数组。那么我转载 2016-09-04 15:05:14 · 996 阅读 · 0 评论 -
数组中最长递增子序列的长度
求数组中最长递增子序列的长度什么是最长递增子序列呢?问题描述如下: 设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=,其中k1如:在序列1,-1,2,-3,4,-5,6,-7中,其最长的递增子序列为1,2,4,6。其长度为4。对于这个问题有以下几种解决思路: 1、把a1,a2,...,an排序,假设得到a'1,a'2,...,a'n,然后转载 2016-09-04 14:09:50 · 652 阅读 · 0 评论 -
算法1——在一个字符串中查找第一个非重复的字符
编写一个Java程序来查找一个字符串中第一个非重复的字符,这是在编程测试中很常见的一个问题,因为字符串处理在程序员面试中是一个普遍的话题。面试前最好是准备好一些熟知的编程问题,例如使用递归反转字符串,或者检查一个字符串是否是回文(即正反读顺序一致)。查找第一个非重复字符的问题也是在同一个范畴。在给出解决方案之前,我们先来弄懂这个问题。我们需要编写一个函数,这个函数接受一个字符串作为参数,并返回第一转载 2016-05-28 14:34:58 · 1389 阅读 · 0 评论 -
算法3—找出字符串中对称的子字符串的最大长度(最长回文)
背景:所谓对称子字符串,就是这个子字符串要么是以其中一个词对称:比如 “aba”, “abcba”;要么就完全对称:比如"abba", "abccba"。问题:给你一个字符串,找出该字符串中对称的子字符串的最大长度。思路:首先,我们用字符数组 char[] array 来保持这个字符串,假设现在已经遍历到第 i 个字符,要找出以该字符为“中心”的最长对称字符转载 2016-05-29 13:52:47 · 1651 阅读 · 0 评论 -
算法2— 一亿数据获取前100个最大值
刚刚在CSDN上看到一个网友利用最小堆实现 “ 获取一亿数据获取前100个最大值” 。然后自己利用quicksort的原理也写了一个程序来解决那个问题。通过测试,基于quicksort原理的方法平均运行时间是1.264秒,基于最小堆方法的平均运行时间是0.288秒 (网友写的程序运行时间比我的大很多,0.288秒这个程序是我自己写的,如果测试网友写的基于minHeap的方法,运行时间是2.501秒转载 2016-05-29 13:48:39 · 5122 阅读 · 0 评论 -
算法4— 判断一个字符串里是否包含另一个字符串所有的字符
问题:有两个字符串,每个字符串的字符从A-Z中选取,比如: B = “ABBC”, A = “ACBBD”。那么A包含所有B中出现的字符。如果A = “ACBD” 或者 A = “ABBD”,则我们认为A不包含B中所有的字符。分析:对于“是否包含”的问题,基本上处理的方法都会与hashtable有关。这题也不例外。思路是把所有A中出现的字符放在一个长度为26的字符数组ar转载 2016-05-29 14:15:47 · 4599 阅读 · 0 评论 -
算法5—字符串压缩和去除排序好数组里面重复的元素
问题:把字符串压缩,比如aaabbbbc, 压缩后成为:a3b4c1。分析:这题很简单,我们只需要从头到尾遍历一遍字符串即可。首先设置一个计数器count, 每次“指针移位”的时候,判断当前字符是否与前一个字符相等,如果相等,count++, 指针继续下移,否则,我们需要对前面已经遍历的字符串进行处理,然后重新初始化count,直到字符串遍历结束。这题的关键是对最后一个字符原创 2016-05-29 14:45:10 · 889 阅读 · 0 评论 -
算法6— 判断两个链表是否相交
问题:给出两个单向链表的头指针,比如h1、h2,判断链表是否相交,如果不相交返回NULL;如果相交,返回指向第一个相交节点的指针。时间复杂度控制在O(n)。分析:如果两单向链表相交的话,一定是Y型相交,不可能出现X型,弄清楚这点后接下来的工作就是:(1)先找到h1,h2的最后一个节点L1和L2,同时记录节点数量a,b;(这里假设 a > b)(2)判断最后一个节转载 2016-05-30 16:04:46 · 438 阅读 · 0 评论 -
算法7— 判断一个单链表是否有环,如果有,找出环的起始位置
第一种方法是从单链表head开始,每遍历一个,就把那个node放在hashset里,走到下一个的时候,把该node放在hashset里查找,如果有相同的,就表示有环,如果走到单链表最后一个node,在hashset里都没有重复的node,就表示没有环。 这种方法需要O(n)的空间和时间。第二种方法是设置两个指针指向单链表的head, 然后开始遍历,第一个指针走一步,第二个指针走两步,如果没转载 2016-05-30 16:10:44 · 822 阅读 · 0 评论 -
算法8—不通过比较,找出两个数的最大值
问题:比如:给定两个值 5和10,不通过比较,直接找出最大值。分析:一旦涉及到不用比较找最大值,想都不用想,一般只能通过位运算来实现。 max = a - ((a-b)&((a-b)>>31))或者max = ((a+b)+|a-b|)/2如果找最小值,我们只需把两个值相加,减去max即可。原创 2016-06-02 15:17:49 · 759 阅读 · 0 评论 -
算法9—两个巨大正整数相加
两个巨大整数相加,可能会造成溢出,或者它的大小已经超出基本数据类型的范围,所以,我们对巨大整数进行相加时,可以把它们转换成字符串,然后通过字符串的处理进行整数相加。这里有两种做法:第一种,把整数存在一个字符数组里进行处理。代码如下:[java] view plain copypublic static String addThroug转载 2016-06-02 15:34:32 · 713 阅读 · 0 评论 -
海量数据处理经典思想
第一部分、十五道海量数据处理1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小转载 2016-06-02 16:00:04 · 528 阅读 · 0 评论 -
算法10—海量数据处理之top k算法
第一部分:Top K 算法详解问题描述百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1转载 2016-06-02 16:27:14 · 3337 阅读 · 0 评论 -
算法11—判断一个树是不是二叉查询树
问题:给定一个二叉树,判断它是否是二叉查询树。思路:要判断是否是二叉查询树,标准就是看每一个节点是否满足:1、左节点及以下节点的值比它小;2、右节点及以下节点的值比它大。当然,前提是子节点都存在的情况。所以,我们需要从根节点不断向下递归,只要所有节点都满足,那么就是BST,否则,就不是。代码:[java] view plain copy转载 2016-06-12 10:53:55 · 573 阅读 · 0 评论 -
算法12—动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
1. 问题描述子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串cnblogsbelong比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列。最长公共子序列(Longest Common Subsequence, LCS),顾名思义,是指在所有的子序列中最长的那一个。子串是要求更原创 2016-07-01 14:13:13 · 516 阅读 · 0 评论 -
算法13—Bit Map算法简介
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这转载 2016-07-14 11:22:40 · 404 阅读 · 0 评论 -
链表经典算法题实现
本文包含链表的以下内容: 1、单链表的创建和遍历 2、求单链表中节点的个数 3、查找单链表中的倒数第k个结点(剑指offer,题15) 4、查找单链表中的中间结点 5、合并两个有序的单链表,合并之后的链表依然有序【出现频率高】(剑指offer,题17) 6、单链表的反转【出现频率最高】(剑指offer,题16) 7、从尾到头打印单链表(剑指offer,题5...原创 2016-09-18 16:29:15 · 2699 阅读 · 0 评论