![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 81
iCoding91
KISS
keep it simple and short
展开
-
常用算法 [进制转换+最小正整数+树的非递归算法]
常用算法 [进制转换+最小正整数+树的非递归算法]问题一 :8和10进制转换public class Main { public static void main(String[] args) { //Scanner scanner = new Scanner(System.in); // 十进制和十六进制转化 String s1 = ...原创 2019-01-04 14:19:18 · 539 阅读 · 0 评论 -
最长重复词问题(java)
1、牛客网原题:对于两个字符串B和C,我们定义BC为将C接在B的后面形成的新串。一个字符串P是串A的前缀,当且仅当存在B使得A=PB,当然B可以为空串。若P!=A,则我们称P为A的真前缀。现在定义重复词。串Q是串A的重复词当且仅当Q是A的真前缀,且A是QQ的前缀。而A的最长重复词则是A的重复词中最长的一个,或者空串(当A没有任何重复串时)。如ababab的最长重复词是abab;abc的原创 2017-10-26 16:39:00 · 666 阅读 · 0 评论 -
纸牌博弈(动态规划java)
1、牛客网题目:题目描述有一个整型数组A,代表数值不同的纸牌排成一条线。玩家a和玩家b依次拿走每张纸牌,规定玩家a先拿,玩家B后拿,但是每个玩家每次只能拿走最左或最右的纸牌,玩家a和玩家b都绝顶聪明,他们总会采用最优策略。请返回最后获胜者的分数。给定纸牌序列A及序列的大小n,请返回最后分数较高者得分数(相同则返回任意一个分数)。保证A中的元素均小于等于1000。原创 2017-10-27 16:30:57 · 1066 阅读 · 0 评论 -
字符串通配(动态规划java)
1、牛客网题目:题目描述对于字符串A,其中绝对不含有字符’.’和’*’。再给定字符串B,其中可以含有’.’或’*’,’*’字符不能是B的首字符,并且任意两个’*’字符不相邻。exp中的’.’代表任何一个字符,B中的’*’表示’*’的前一个字符可以有0个或者多个。请写一个函数,判断A是否能被B匹配。给定两个字符串A和B,同时给定两个串的长度lena和lenb,请返原创 2017-10-27 18:08:17 · 1296 阅读 · 1 评论 -
折纸问题(递归java)
1、问题描述:请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。 给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".原创 2017-10-29 12:01:50 · 1322 阅读 · 0 评论 -
合唱团问题(dp)
1、题目描述有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 i(-50 输出描述:输出一行表示最大的乘积。示例1输原创 2017-10-30 16:08:39 · 630 阅读 · 0 评论 -
字典排序问题加强版(java)
1、牛客网原题:题目描述牛牛的作业薄上有一个长度为 n 的排列 A,这个排列包含了从1到n的n个数,但是因为一些原因,其中有一些位置(不超过 10 个)看不清了,但是牛牛记得这个数列顺序对的数量是 k,顺序对是指满足 i 输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含两个整数 n 和 k(1 输出描述:输出一行表示合法的排列数目。示例1原创 2017-11-02 17:04:41 · 596 阅读 · 0 评论 -
构造队列问题(循环队列变形java)
1、牛客网原题:题目描述小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:while(!Q.empty()) //队列不空,执行循环{ int x=Q.front(); //取出当前队头的值x Q.pop(); //弹出当前队头原创 2017-11-05 14:33:57 · 386 阅读 · 0 评论 -
数字游戏问题(迭代java)
1、牛客网原题:题目描述小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给原创 2017-11-06 17:15:23 · 434 阅读 · 0 评论 -
饥饿的小易(BFS问题)
1、原题:题目描述小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位原创 2017-11-08 16:40:48 · 1964 阅读 · 0 评论 -
Hanoi拓展(java)
1、题意:题目描述有一个int数组arr其中只含有1、2和3,分别代表所有圆盘目前的状态,1代表左柱,2代表中柱,3代表右柱,arr[i]的值代表第i+1个圆盘的位置。比如,arr=[3,3,2,1],代表第1个圆盘在右柱上、第2个圆盘在右柱上、第3个圆盘在中柱上、第4个圆盘在左柱上。如果arr代表的状态是最优移动轨迹过程中出现的状态,返回arr这种状态是最优移动轨迹中原创 2017-10-25 17:21:49 · 244 阅读 · 0 评论 -
Hanoi汉诺塔问题(java)
之前就听说过Hanoi这个问题,然后就觉得这个实践起来好难操作,反正我这个手笨的人肯定是没戏了....。刷题遇到了,只能研究一下怎么回事了。OK,参考了Hanoi思想和别人家的代码,终于写完,其实代码很少,就是思想很关键吧。1、牛客网题目:对于传统的汉诺塔游戏我们做一个拓展,我们有从大到小放置的n个圆盘,开始时所有圆盘都放在左边的柱子上,按照汉诺塔游戏的要求我们要把原创 2017-10-25 11:39:12 · 878 阅读 · 0 评论 -
dijkstra拓展(规划最短航线问题)
1、牛客网原题:题目描述“呼!!终于到了,可是接下来要怎么走才能到达楚楚街港港呢?”亮亮在醋溜港直发愁。 突然“啾”的一下,一只银色小船出现在亮亮的面前,上面坐着小精灵丹丹“又见面了,有什么可以帮助你的么?”小精灵向亮亮眨了眨眼睛,微笑着说。 “我想去楚楚街港,但我不知道要怎么走,请问你可以告诉我么?”亮亮按捺着激动的心情轻声问道。 “楚楚街港呀......那是个特别美好的地方原创 2017-10-23 23:47:59 · 717 阅读 · 0 评论 -
并查集及其算法实现
1、算法思想:转自:http://blog.csdn.net/hpuhjh/article/details/47832795一、算法介绍:并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。 并查集的基本操作有两个:1:合并union(x, y):把元素 x 和元素 y 所在的集合合并,原创 2017-09-21 22:19:51 · 304 阅读 · 0 评论 -
最长公共子序列
1、题目描述:时间限制:3秒 空间限制:32768K 热度指数:6932本题知识点: 贪心 动态规划 算法知识视频讲解题目描述对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,这里的最长公共子序列定义为有两个序列U1,U2,U3...Un和V1,V2,V3...Vn,其中Ui<Ui+1,Vi<Vi+1。且A[Ui] == B[Vi原创 2017-09-28 16:44:20 · 324 阅读 · 0 评论 -
为给定字符串设计哈夫曼编码java实现
1、牛客网题目:题目描述请设计一个算法,给一个字符串进行二进制编码,使得编码后字符串的长度最短。输入描述:每组数据一行,为待编码的字符串。保证字符串长度小于等于1000。输出描述:一行输出最短的编码后长度。示例1输入MT-TECH-TEAM输出332、code原创 2017-10-16 17:52:13 · 2046 阅读 · 0 评论 -
回溯算法解数独问题(java版)
一直不太会数独问题,这次下决定搞明白,找到这篇文章,觉得说的真的很清楚,所以转下来啦。转自:http://blog.csdn.net/tianyaleixiaowu/article/details/50912924下面来详细讲一下如何用回溯算法来解数独问题。 下图是一个数独题,也是号称世界上最难的数独。当然了,对于计算机程序来说,只要算法是对的,难不难转载 2017-10-18 11:36:13 · 503 阅读 · 0 评论 -
数独求解java
1、牛客网原题:数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。输入描述:输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。输出描述:输出九行,每行九个空格隔开的数字,为解出的答案。2、code实现package schooloffer原创 2017-10-18 18:15:55 · 509 阅读 · 0 评论 -
快速幂求法(二进制求解)java实现
1、如果不用final类Math下面的方法pow求解一个数字的幂次方,那么可以使用二进制方式实现这一一个功能。2、思想:3、code实现:import java.util.Scanner;/** * 快速幂求法(二进制求解) * 算法思想:利用了二进制和幂的对应关系. * 举例:求Math.pow(3,5)值.求3的5次方的值. * (1)底数=3,幂=5;原创 2017-10-19 16:25:49 · 927 阅读 · 0 评论 -
Fibonacci求解第n项(矩阵法)
1、递归法,时间复杂度:O(n*n);2、普通循环算法:时间复杂度:O(n);3、矩阵法:时间复杂度:O(logn);前2个方法,都比较简单,刷题时候用过了,但是这次刷题,属于Fibonacci加强版,对时间性能很有要求,使用1或者2方法一直ac不了,所以看了矩阵求解方法。这个方法看了一个下午才明白,所以一定要记录的。3.1、先看一下矩阵法的推导过程,也就是如何把一个Fibonacci求解转为对矩...原创 2017-10-19 18:20:15 · 1477 阅读 · 0 评论 -
Fibonacci扩展(奶牛问题)
此题目,还是用快速幂求解,以空间换时间的思想。下面给出题目、思想分析、代码1、题目:在农场中,奶牛家族是一个非常庞大的家族,对于家族中的母牛,从它出生那年算起,第三年便能成熟,成熟的母牛每年可以生出一只小母牛。即母牛从出生开始的第三年便能做妈妈。最开始农场只有一只母牛,它从第二年开始生小母牛。请设计一个高效算法,返回第n年的母牛总数,已知n的范围为int范围内的正整原创 2017-10-22 12:46:22 · 1026 阅读 · 0 评论 -
单源最短路径Dijkstra算法(java实现)
一直没写过Dijkstra算法,都是停留在理论中,这次终于写了一个,当然也参考了其他人的code,但是毕竟还是从code上面又进步了,继续刷题~~~1、牛客网题目:原来是要到醋溜站台乘坐醋溜快车到醋溜港”,亮亮解出了地图隐藏的秘密,赶紧奔向醋溜站台,但到了之后,亮亮忧桑地发现,从醋溜站台到醋溜港沿途的每个车站都有很多美女被他飒爽的英姿所吸引,只要经过车站就会被这些漂亮的女孩搭讪,但原创 2017-10-22 21:24:30 · 657 阅读 · 0 评论 -
编码问题(java)
1、题目:题目描述假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa的Index为2,以原创 2017-11-19 13:49:03 · 339 阅读 · 0 评论 -
进制转换问题(java)
虽然这个题目比较简单,但是还是要记录一下,毕竟算是个进制转换到通用写法,还是比较方便的。1、题目描述给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。输出描述:为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10原创 2017-11-17 15:40:20 · 446 阅读 · 0 评论 -
混合颜料(求矩阵的秩问题)
感觉这是一个思路还挺奇特的题目,算是一种新思路积累吧。反正是第一次用code求一个矩阵的秩,我还是太差啦...努力空间太大1、题目:题目描述你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自原创 2017-11-11 11:22:36 · 429 阅读 · 0 评论 -
幸运的袋子问题(DFS+回溯+剪枝)
其实,自己一直对回溯问题理解,但是自己就是写不出code,而且,之前对剪枝也不是太熟悉,只能说听过这个词。那么,这次刷的这个题目,就把DFS+回溯+剪枝这3个问题同时应用到了,不得不说,真心多刷题才能对一些算法思想:从认识到理解,再到懂得,最后才算真明白了。开始都只是单纯认同而已。所以,一定要多刷题,多对比,多总结。1、题目:题目描述一个袋子里面有n个球,每个球原创 2017-11-10 18:04:57 · 1970 阅读 · 0 评论 -
Java数组排序中Comparator接口实现自定义排序
1、为节点排序。节点由3个字段组成,包括num ,weight ,height 。先按照weight升序排序,再按照height降序排序。2、使用Comparator接口规则:编写多个排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法。升序是前者减去后者,降序是后者减去前者。3、代码测试:同时也是牛客网中某题。题目描述:搜狐员原创 2017-09-22 11:56:34 · 4151 阅读 · 2 评论 -
LRU和LFU的区别
转自:http://blog.csdn.net/summerhust/article/details/6867171LRU和LFU是不同的!LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数转载 2017-09-30 17:36:35 · 259 阅读 · 0 评论 -
字符串计数-字典排序
1、牛客网题目:题目描述求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。输入描述:每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)输出描述:输出答案。示例1输入ab ce 1 2原创 2017-10-18 11:02:52 · 697 阅读 · 0 评论 -
最长公共子串
1、注意:公共子串,要求子串的字符是连续的;公共子序列,不要求子序列的字符是连续的。2、题目描述:时间限制:3秒 空间限制:32768K 热度指数:6867本题知识点: 贪心 动态规划 算法知识视频讲解题目描述对于两个字符串,请设计一个时间复杂度为O(m*n)的算法(这里的m和n为两串的长度),求出两串的最长公共子串的长度。这原创 2017-09-28 18:11:48 · 269 阅读 · 0 评论 -
字典序法生成全排列算法的证明
转自:http://blog.csdn.net/cpfeed/article/details/7376132引言对一个给定数据进行全排列,在各种场合经常会用到。组合数学中,生成全排列的方法有很多,卢开澄老师的《组合数学》中就介绍了三种:序数法,字典序法,临位互换法等。其中以字典序法由于算法简单,并且使用的时候可以依照当前状态获取下一个状态,直到所有排列全部完成,方便在程转载 2017-07-04 15:59:28 · 542 阅读 · 0 评论 -
牛客网第10题:动态规划 Word Break
研究了一下转的文章,自己又敲了一遍,感觉终于理解了,好好刷题,加油~转自:http://blog.csdn.net/yangliuy/article/details/43602313Given a string s and a dictionary of words dict, add spaces in s to construct a sentence wher转载 2017-05-06 19:29:12 · 476 阅读 · 0 评论 -
任务分配问题---匈牙利算法
一、问题描述问题描述:N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配给一个人是需要支付报酬,如何分配任务,保证支付的报酬总数最小。问题数学描述: 二、实例分析---穷举法在讲将匈牙利算法解决任务问题之前,先分析几个具体实例。以3个工作人员和3项任务为实例,下图为薪酬图表和根据薪酬图表所得的cost矩阵。转载 2017-01-03 18:01:13 · 9227 阅读 · 0 评论 -
地牢逃脱问题(BFS拓展java)
1、牛客网题目:题目描述给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这原创 2017-11-04 19:26:14 · 472 阅读 · 0 评论 -
分田地问题(java)
1、题目:题目描述牛牛和 15 个朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成 16 份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地, 作为牛牛最好的朋友,你希望牛牛取得的田地的价值和尽可能大,你知道这个值最大可以是多少吗?输入描述:每个输入包含 1 个测试用例。每个测试原创 2017-12-02 15:46:27 · 862 阅读 · 0 评论 -
电话号码分身(java小米校招17)
1、题目:题目描述继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的原创 2017-12-02 11:53:13 · 736 阅读 · 3 评论 -
对n以内的数字进行字典序排序(java)
刷题时,遇到的问题,目前是想到了两种方式:一种是重写比较器;另一种是使用字符串的表达方式,然后进行自然排序。下面给出例子。1、改写比较器方式package schooloffer17;import java.util.*;/** * @Author: cxh * @CreateTime: 17/11/21 15:28 * @ProjectName: JavaB原创 2017-11-21 20:13:05 · 8186 阅读 · 1 评论 -
求数列的和(double保留2位小数)
1、题目:题目描述数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。输入描述:输入数据有多组,每组占一行,由两个整数n(n 输出描述:对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。示例1输入81 42 2输出94.733.41原创 2017-11-24 16:30:46 · 1144 阅读 · 0 评论 -
数的高度(java)
之前求树的高度,都是直接用的节点定义的树的结构,这次是给出的数组,其实也没差距太多。层序遍历即可解决。1、二叉树的树高(默认,输入一个节点有多个孩子节点时,从第3个孩子节点开始,后续节点都被忽略,不作为该节点的孩子节点处理)1.1、题目描述现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度输入描述:输入的第一行表示原创 2017-11-26 23:35:26 · 467 阅读 · 0 评论 -
数串问题(java)
1、牛客网题:题目描述设有n个正整数,将他们连接成一排,组成一个最大的多位整数。如:n=3时,3个整数13,312,343,连成的最大整数为34331213。如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。输入描述:有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N输出描述:每组数据输出一个表示最大的整数。原创 2017-11-27 11:26:29 · 1458 阅读 · 0 评论