![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法的友尽之旅
V_Lute
这个作者很懒,什么都没留下…
展开
-
最长递增子序列
转载自:http://qiemengdao.iteye.com/blog/1660229动态规划法(时间复杂度O(N^2))设长度为N的数组为{a0,a1, a2, ...an-1),则假定以aj结尾的数组序列的最长递增子序列长度为L(j),则L(j)={ max(L(i))+1, i<j且a[i]<a[j] }。也就是说,我们需要遍历在j之前的所有位置i(从0到j-1),找出...转载 2019-10-12 16:45:34 · 100 阅读 · 0 评论 -
最长公共子序列(LCS)与最长公共子串(DP)
文章参考自https://blog.csdn.net/qq_31881469/article/details/77892324对于母串X=<x1,x2,⋯,xm>, Y=<y1,y2,⋯,yn>,求LCS与最长公共子串。动态规划假设Z=<z1,z2,⋯,zk>是X与Y的LCS, 我们观察到如果Xm=Yn,则Zk=Xm=Yn,有Zk−1是Xm−1与Yn...转载 2018-09-04 15:09:46 · 479 阅读 · 0 评论 -
牛的视野(单调栈问题)
题目:一群高度不完全相同的牛从左到右站成一排,每头牛只能看见它右边的比它矮的牛的发型,若遇到一头高度大于或等于它的牛,则无法继续看到这头牛和后面的其他牛的发型。给出这些牛的高度,要求每头牛可以看到的牛的数量的和。解析:若求每头牛能看到的牛的数量,可以参考https://blog.csdn.net/Broken_Wave/article/details/82390882,也是使用单调栈在这里...原创 2018-09-04 21:03:14 · 1636 阅读 · 0 评论 -
找出数组中每个数的右边第一个比它大的数或之间有多少数(单调栈问题)
题目:给出一组数,找出数组中每个数的右边第一个比它大的数分析:利用单调栈,从左至右依次压入数据的索引(若直接压数,则还需要一个数组保存栈中元素所对应的数组位置)当当前元素小于等于栈顶的索引所对应的数组的值,入栈当前索引,否则将栈顶索引出栈,并在栈顶索引所对应的res数组中记录下当前的值。到最后再检查栈中剩余元素,代表剩余元素右边没有比它大的值,在res对应位置赋值为-1imp...原创 2018-09-04 21:46:54 · 2548 阅读 · 0 评论 -
Java求全排列(字典序和递归)
文章主体转载自 https://www.cnblogs.com/zhouthanos/p/3807495.html示例: 1 2 3的全排列如下:1 2 3 , 1 3 2 , 2 1 3 , 2 3 1 , 3 1 2 , 3 2 1方法一、字典序如果当前排列是124653,找它的下一个排列的方法是,从这个序列中从右至左找第一个左邻小于右邻的数,如果找不到,则所有排列求解完成...转载 2018-09-02 18:36:07 · 2476 阅读 · 0 评论 -
面积最大的矩形(单调栈问题)
题目:有N个矩形,宽度都为1,给出N个矩形的高度,求由这N个矩形组成的图形包含的最大的矩形面积。分析:对于每个矩形,我们求出它向左向右分别能延伸的长度,然后乘以它的高度,这就是以当前矩形为最低高度可以得到的最大的面积。对于输入数据input,对于其每个数input[i]1、如果栈为空或input[i] 大于等于input[st.top] , 则入栈 i,否则将大于入栈元素的栈顶元素出栈...原创 2018-09-05 16:59:25 · 1315 阅读 · 0 评论 -
链表中环的入口节点
题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { if(pHead==null|| pHead.next==null|| pHead.next.next==null) ...转载 2018-09-06 17:28:15 · 128 阅读 · 0 评论 -
反转链表
输入一个链表,反转链表后,输出新链表的表头。剑指offer原题,在此留个记录public class Solution { public ListNode ReverseList(ListNode head) { if(head==null) return null; //head为当前节点,如果当前节点为空...转载 2018-09-06 17:43:18 · 114 阅读 · 0 评论 -
编辑距离Edit Distance
编辑距离,又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。先创建一个矩阵,假设有两个字符串,我们的字符串的长度分别是m和n,那么,我们矩阵的维度就应该是(m+1)*(n+1).首先是边界: ...原创 2018-09-13 15:31:33 · 422 阅读 · 0 评论 -
小Q的歌单
题目:小Q有X首长度为A的不同的歌和Y首长度为B的不同的歌,现在小Q想用这些歌组成一个总长度正好为K的歌单,每首歌最多只能在歌单中出现一次,在不考虑歌单内歌曲的先后顺序的情况下,请问有多少种组成歌单的方法。输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含一个整数,表示歌单的总长度K(1<=K<=1000)。接下来的一行包含四个正整数,分别表示歌的第一种长度A...原创 2018-09-01 19:24:31 · 169 阅读 · 0 评论 -
topk问题(最小K个数)
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。分析:这里直接使用最小堆的方法来解决,创建优先级队列PriorityQueue,实现自己的比较方法,如果最顶端的数大于下一个数,则替换掉代码:import java.util.ArrayList;import java.util.PriorityQueue...原创 2018-08-25 16:06:11 · 312 阅读 · 0 评论 -
并查集(Union-Find)算法
并查集(Union-Find)是解决动态连通性问题的一类非常高效的数据结构。动态连通性可以想象一张地图上有很多点,有些点之间是有道路相互联通的,而有些点则没有。如果我们现在要从点A走向点B,那么一个关键的问题就是判断我们能否从A走到B呢?换句话说,A和B是否是连通的。这是动态连通性最基本的诉求。现在给出一组数据,其中每个元素都是一对“点”,代表这对点之间是联通的,我们需要设计一个算法,让计...原创 2018-08-26 17:05:54 · 552 阅读 · 0 评论 -
顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.分析:剑指offer原题,这里留个记录方便以后查看import java.util.ArrayList;clas...原创 2018-08-26 17:18:17 · 118 阅读 · 0 评论 -
笔试编程:客服排班问题
客服管理员管理着n个客服小姐,他需要为每一组安排客服24小时值班,为简单起见,假设每组只有两个客服,一天只需要1个客服上班,并且一些客服由于某些原因不能在同一天上班,我们已经对客服进行了编号,第i(i>=1&&i<=n) 个组的客服编号为2*i-1和2*i,并且知道了m种如下约束关系:客服编号a和编号b不能一起上班,管理员选哟你帮忙判断一下今天是否存在可行的方案,既满足...原创 2018-05-12 09:58:57 · 2004 阅读 · 0 评论 -
求01二维矩阵中最大全为1的正方形边长
题目:在一个二维01矩阵中找到全为1的最大正方形样例:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0算法:以矩阵中每一个点作为正方形右下角点来处理,当该点为1时,以该点为右下角点的最大边长最多比以它的左方、上方和左上方为右下角的正方形边长多1,即如果该点左上的三个点有值为0的点,当前点所在的全为1的正方形最大边长只能为1,所以这时只能取另外三个正方形中...原创 2018-08-22 21:15:27 · 2620 阅读 · 0 评论 -
孪生质数
题目:数学中有很多奇特的现象,孪生质数就是一种(孪生素数就是指相差2的质数对,例如3和5,5和7,11和13…),现在要求输出所有在m和n范围内的孪生质数。输入:输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)例如:100 150输出对于每个测试实例,要求输出所有在给定范围内孪生质数,就是说,输出的孪生质数必须大于等于m,并且小于等于...原创 2018-08-27 14:40:11 · 4419 阅读 · 0 评论 -
最短最优升级路径
题目:游戏网站提供若干升级补丁,每个补丁大小不一,玩家要升级到最新版,如何选择下载哪些补丁下载量最小。输入:第一个数为用户版本 第二个数为最新版本,空格分开接着输入N行补丁数据 第一个数补丁开始版本 第二个数为补丁结束版本 第三个数为补丁大小,空格分开 样例输入1000 10501000 1020 501000 1030 701020 1030 ...原创 2018-08-27 14:51:17 · 531 阅读 · 0 评论 -
多线程协作打印
题目:建立m个线程,每个线程只能打印一种字符,要求线程同时运行,交替打印n次字符。比如: n=3 m=2打印字符为A和B。要求线程1打印3次A,线程2打印3次B,在屏幕输出ABABAB注意: 需要检查输入有效性,遇到错误输入时,请打印error并安全退出输入打印次数n和字符序列。比如:2 ABC(三个字符需要三个打印线程)样例输入2 ABC输出每个线程打印n...原创 2018-08-27 15:02:18 · 505 阅读 · 0 评论 -
切绳子(最大乘积)
题目: 一根绳子,长度为n米。将其切成几段,每一段的长度都是整数。请给出一种切法,使得切成的各段绳子之间的乘积是最大的。注意,最少要切一下的。即自然数N分解为n个自然数的和,求这n个数的乘积最大值分析:(1)n<4时,拆分的最大乘积比原来小,2拆分成(1,1,)乘积为1,3拆分成(1,2)乘积为2;(2)n=4时,拆分最大乘积与原来相等,4拆分成(2,2),...转载 2018-08-24 15:47:47 · 2207 阅读 · 2 评论 -
鹰蛋问题
题目: 一幢 100 层的大楼,给你两个鸡蛋。如果在第 n 层扔下鸡蛋,鸡蛋不碎,那么从第 n-1 层扔鸡蛋,都不碎。这两只鸡蛋一模一样,不碎的话可以扔无数次。最高从哪层楼扔下时鸡蛋不会碎?1. 如果有无数个蛋 用二分法就能在O(logn)的次数内求解问题2.如果只有2个蛋第一种:把楼层等分试探求解 把楼层分为x等分,用第一鹰蛋从下...转载 2018-08-24 16:13:29 · 1385 阅读 · 0 评论 -
数组中两个数异或求最大值
题目:求 n 个非负数中任意 2 个的异或值的最大值。n 数量级为 10^5。分析:直接暴力求解一定会超时。但是一个字符串可以看成一个32位的01字符串,因此可以建立字典树,建立好树以后对于任意非负整数x,顺着树贪心查找。当前位为0则查找是否存在1,找到0 or 1就继续,找不到就忽略继续查找。字典树建立和插入时都是将数字倒序插入或查找字典树介绍:字典树又称单词查找树,Trie 树,是...原创 2018-08-26 15:56:04 · 1696 阅读 · 0 评论