八、算法和一些oj题
syrdbt
这个作者很懒,什么都没留下…
展开
-
剑指Offer Java题解(前3道题)
目录1. 二维数组中的查找2.替换空格3.从尾到头打印链表1. 二维数组中的查找题目链接:传送。方法一,暴力枚举。参考代码:package problem01;/** * @Author syrdbt * @Date 2019/7/3 14:05 * 二维数组中的查找 * 方法一,暴力枚举 */public class Solution { ...原创 2019-07-12 15:45:47 · 192 阅读 · 0 评论 -
1065 最小正子段和
N个整数组成的序列a[1],a[2],a[3],…,a[n],从中选出一个子序列(a[i],a[i+1],…a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的。例如:4,-1,5,-2,-1,2,6,-2。-1,5,-2,-1,序列和为1,是最小的。Input第1行:整数序列的长度N(2<=N<=50000)第2-N+...原创 2018-04-14 22:21:56 · 242 阅读 · 0 评论 -
1266 蚂蚁
n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。例如:竿子长10cm,3只蚂蚁位置为2 6 7,最短需要4秒(左、右、右),最长需要8秒(右、右...原创 2018-04-14 21:58:14 · 232 阅读 · 0 评论 -
1019 逆序数
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。Input第1行:N,N为序列的长度(n<=50000)第2-N+1行:序列中的元素(0<=A[i]<...原创 2018-04-14 21:01:48 · 371 阅读 · 0 评论 -
kmp(最多有几个循环节+模式串在主串中出现几次)
kmp 算法,可以计算模式串是否在主串中出现,以及出现的位置。 kmp_nextt 模式串的自我匹配, j 1 2 3 4 5 6 7 8 模式 a b a a b c a c nextt[j] 0 1 1 2 2 3 1 2 get_nextval() 是 kmp_nextt 的优化...原创 2017-10-16 18:26:24 · 322 阅读 · 0 评论 -
Divide by three, multiply by two ( 深搜 )
D. Divide by three, multiply by twoPolycarp likes to play with numbers. He takes some integer numberxx, writes it down on the board, and then performs with itn−1n−1operations of the two kinds:d...原创 2018-05-07 20:46:31 · 1922 阅读 · 0 评论 -
第九届蓝桥杯省赛第六题:递增三元组(时间复杂度:n)
递增三元组给定三个整数数组A = [A1, A2, ... AN],B = [B1, B2, ... BN],C = [C1, C2, ... CN],请你统计有多少个三元组(i, j, k) 满足:1. 1 <= i, j, k <= N2. Ai < Bj < Ck【输入格式】第一行包含一个整数N。第二行包含N个整数A1, A2, ... AN。第三行包...原创 2018-04-19 21:30:15 · 1289 阅读 · 2 评论 -
Poj 3468 A Simple Problem with Integers(线段树区间更新)
A Simple Problem with IntegersDescriptionYou haveNintegers,A1,A2, ... ,AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a...原创 2017-11-06 22:04:46 · 338 阅读 · 0 评论 -
1459 迷宫游戏 (dijkstra)
你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规定了你的起点和终点房间,你首要目标是从起点尽快到达终点,在满足首要目标的前提下,使得你的得分总和尽可能大。现在问题来了,给定房间、道路、分数、起点和终点等全部信息,你能计算在尽快离开迷宫的前提下,你...原创 2017-11-09 19:03:09 · 423 阅读 · 0 评论 -
2006 飞行员配对(二分图最大匹配)
第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2名飞行员,其中1名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一个算法找出最佳飞行员配对方案,使皇家空 军...原创 2018-05-23 11:51:23 · 366 阅读 · 0 评论 -
Dp 基础: 最长公共子序列
最长公共子序列是一个最基础的Dp,要想搞懂他可以手动模拟一下,很有效。 下面用一个maxlen的二维数组来记录我们的比较情况, maxlen[i][j]记录的就是两个字符串 s1的前 i个字符与s2前 j 个字符的最长公共子序列; 下面介绍下最重要的两个步骤: if(s1[i] == s2[j]) maxlen[i][j] =...原创 2017-08-27 16:19:30 · 325 阅读 · 0 评论 -
POJ 1837 Balance
题目大意: 一个天平,给你一些挂钩(固定的),砝码,要求砝码全用,挂钩可以只用一些,砝码在天平上的效果等于挂钩距离中心点的距离与砝码重量的乘积。Input:2 4 -2 3 3 4 5 8输入样例分析:第一行:2 代表挂钩数量 4 代表砝码数量第二行:挂钩与中心点的距离(负的代表在中心点左边,正的当然是右边)第三行: 砝码的重量解题思路:因为砝码需要全用,所以...原创 2017-08-29 14:11:17 · 290 阅读 · 0 评论 -
POJ 1276 Cash Machine
题目大意:给你一个最大金额和一些纸币让你从这些纸币中挑选任意张,问不超过最大金额的总金额(所有纸币面额之和)。思路:不断枚举各种纸币,记录符合条件的总金额情况,更新最大值。参考代码如下:#include<stdio.h>#include<string.h>int dp[100100], num[1001000], v[100100];// dp[] 记录...原创 2017-08-29 16:00:11 · 200 阅读 · 0 评论 -
最长上升子序列
最长上升子序列:给你一个数列,你可以从从中选一些数字,要求这些数字是递增的,问你选出的递增数列最大长度。 思路:开一个数组,如dp[n], n 是这个数列的长度, dp[i]的意思是以数列中第i个数字结尾的最长上升子序列。 手动模拟一下: 给你一个数列 a ={1 ,3 ,4, 2 } 长度为4 , 假设下标从1开始,便于理解。 ...原创 2017-08-30 15:56:17 · 168 阅读 · 0 评论 -
1649 齐头并进(dijkstra)
在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过m条双向火车铁轨相连。当然某些小镇之间也有公路相连。为了保证每两个小镇之间的人可以方便的相互访问,市长就在那些没有铁轨直接相连的小镇之间建造了公路。在两个直接通过公路或者铁路相连的小镇之间移动,要花费一个小时的时间。现在有一辆火车和一辆汽车同时从小镇1出发。他们都要前往小镇n,但是他们中途不能同时停在同一个小镇(但是可以同时停在小镇...原创 2018-04-15 19:59:11 · 300 阅读 · 0 评论 -
1117 聪明的木匠
一位老木匠需要将一根长的木棒切成N段。每段的长度分别为L1,L2,......,LN(1 <= L1,L2,…,LN <= 1000,且均为整数)个长度单位。我们认为切割时仅在整数点处切且没有木材损失。木匠发现,每一次切割花费的体力与该木棒的长度成正比,不妨设切割长度为1的木棒花费1单位体力。例如:若N=3,L1 = 3,L2 = 4,L3 = 5,则木棒原长为12,木匠可以...原创 2018-04-15 20:24:54 · 472 阅读 · 0 评论 -
1268 和为K的组合(DFS)
给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K。如果可以,输出:"Yes",否则输出"No"。Input第1行:2个数N,K,N为数组的长度,K为需要判断的和(2<=N<=20,1<=K<=10^9)第2-N+1行:每行1个数,对应数组的元素A[i](1<=A[i]<=10^6)Ou...原创 2018-04-19 20:53:41 · 1101 阅读 · 0 评论 -
LeetCode 刷题集锦
目录1.1108. IP 地址无效化2.1093. 大样本统计3.888. 公平的糖果交换4.445. 两数相加 II1.1108. IP 地址无效化题目链接 1108. IP 地址无效化 题目描述 解题思路 替换.为 [.] , 如果使用Java最好使用stringBuilder,而且可以使用stri...原创 2019-07-16 15:05:50 · 320 阅读 · 0 评论 -
马走日,遍历棋盘的途径总数,c++(深搜)
描述 马在中国象棋以日字形规则移动。 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。 输入 第一行为整数T(T < 10),表示测试数据组数。 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=...原创 2019-05-16 21:34:09 · 2581 阅读 · 0 评论 -
Poj 3984 迷宫问题(广搜+输出路径)
Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右...原创 2019-05-16 21:17:04 · 753 阅读 · 0 评论 -
2945:拦截导弹(最长降序子序列)
描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。 输入 输入有两...原创 2019-05-16 20:54:05 · 458 阅读 · 0 评论 -
逆波兰式Java 代码实现
把正常的表达式看做表达式的中序遍历,那么逆波兰式(Reverse Polish notation,RPN)就是该表达式的后序遍历,即将运算符放在操作数之后,波兰式则是该表达式的前序遍历。1.算法基本实现需要一个栈s1和一个数组s2;栈 s1 用来存放存储临时运算符,标志着开始 ,初始里面有一个#号,#号是最低优先级。s2数组存储转换后的表达式。不断从表达式中取出数...原创 2019-05-15 22:37:46 · 1745 阅读 · 0 评论 -
LeetCode 150.逆波兰表达式求值,Java参考代码
题目链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/1.使用栈去解决参考代码:class Solution { public int evalRPN(String[] tokens) { Stack<Integer> evalStack = new Stac...原创 2019-05-15 21:58:07 · 322 阅读 · 0 评论 -
Bellman-Ford 代码实现
目录1. 算法学习1.1存在负环就没有最短路1.2 Bellman-Ford的适用情况1.3 核心算法思想2. 代码实现3. 代码检验,poj 1860Currency Exchange1. 算法学习1.1存在负环就没有最短路首先需要理解"存在负环就没有最短路",原因:你可以一直在这个负环打圈,路径权值会不断减小,不断地趋近于负无穷...原创 2019-03-17 11:03:56 · 1173 阅读 · 0 评论 -
最短路 dijkstra 学习、代码实现
1.概述dijkstra单源最短路,单源最短路即把一个点当作源点,求得这个点到其它点的最短路。算法的基本思路:首先用一个辅助数组pos[ ], pos[i]就是源点到结点i的最短距离,如果邻接矩阵存储,pos[ ]也就是 a[i][ ]。一个标记数组vis[], vis[i]为true则已经找到源点到这个点的最短距离,为false则还未确定源点到这个点的最短距离...原创 2017-10-10 14:31:02 · 434 阅读 · 0 评论 -
最小生成树 Kruskal 学习、代码实现
1.概述Kruskal最小生成树算法,算法的大概思路为:将所有边升序排列,然后从值最小的边开始取边,如果当前的边添加到已取的边中不构成环,则取该边,否则舍弃这条边,去判断下一条边,重复上述操作一直到取到n-1条边,这n-1条边和n个节点就是最小生成树。一个例子,基于这样的一个图:利用 Kruskal生成最小生成树的过程如下所示:2.代码实现Kruskal最...原创 2019-04-13 21:44:00 · 497 阅读 · 0 评论 -
最小生成树(Prim)学习、代码实现
目录1. 概述2. 代码实现3. 代码验证:hdu 4463Outlets参考文献1. 概述初始化一个数组U,存储已经遍历的节点(数组U初始化可以为任何一个,一般为v1),不断的找与“已遍历节点距离最短”的节点加入到数组U中,等到所有的节点都加入到U中,所选择的n-1条“最短边”和n个节点即为该树的最小生成树。举一个例子,图中有 6个节点(V1,V2、V3...原创 2017-10-09 20:50:22 · 1344 阅读 · 2 评论 -
1279 扔盘子 (Stack)
有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去)。盘子有几种命运:1、掉到井底。2、被卡住。3、落到别的盘子上方。盘子的高度也是单位高度。给定井的宽度和每个盘子的宽度,求最终落到井内的盘子数量。如图井和盘子信息如下:井:5 6 4 3 6 2 3盘子:2 3...原创 2018-04-15 20:08:37 · 217 阅读 · 0 评论 -
2025 : 简单环路 ( 并查集 判断图中是否有环 )
题目链接:点击打开链接这道题我用的是并查集: 将题中图生成了一个无向图,标号为 i*m+j ( i, j 分别为行号, 列号, 下标均从 0 开始)图中的 n*m 个点 编号分别为 : 0,1,2,3,... n*m-1 ;如果 map[x1][y1] == map[x2][y2] , 且 (x1, y1) 和 (x2, y2) 相邻 , 那么 点x1*m+y1 和 点 x2*m+y...原创 2018-05-14 22:50:26 · 492 阅读 · 0 评论 -
等比数列求和 (快速幂 + 逆元)
求一个等比数例之和, 并让他对一个数取模。 用到等比数列求和公式, 快速幂, 逆元。 不会证明, 下面给出代码。#include <stdio.h>#include <string.h>#include <math.h>typedef long long ll;ll multi(ll a,ll b,ll m) ...原创 2017-10-11 10:37:13 · 3251 阅读 · 0 评论 -
1126 求递推序列的第N项 (矩阵快速幂)
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.给出A,B和N,求f(n)的值。Input输入3个数:A,B,N。数字之间用空格分割。(-10000<=A,B<=10000,1<=N<=10^9)Output输出f(n)的值...原创 2018-05-18 22:50:55 · 363 阅读 · 0 评论 -
Poj 1260 Pearls
题意:有一些珍珠,给你珍珠的数量价格,你需要买下所有的珍珠,购买的方法买一种珍珠,设珍珠数量n 、价格 p,则须支付(n+10)*p 元。具体例子如下:For example 5 pearls are needed in the 10 Euro category and 100 pearls are needed in the 20 Euro category. That will no...原创 2017-09-09 13:19:24 · 231 阅读 · 0 评论 -
Poj 3176 Cow Bowling
这道题题意很简单,直接说思路吧。可以Dp、递推,递推容易理解,时间复杂度低,递推优于Dp。先讲一下Dp:开一个dp[ ][ ] 数组, dp[i][j] 意味着牛走到第 i 行 , 第 j 个点的最优值。从第一行开始分别取每个点的最优值,每个点的值都不为负, 所以列出下式:dp[i][j] = max(dp[i-1][j-1] + m[i][j], dp[i-1][j...原创 2017-09-13 18:04:52 · 191 阅读 · 0 评论 -
Poj 1159 Palindrome
题意:给你一个字符串,问最少加多少个字符可以使之成为回文串。思路:把字符串倒置, 求最长公共子序列, 字符长度 减最长公共子序列长度就是 结果。 注意: 卡内存, 需要用 01 数组。代码:#include<stdio.h>#include<string.h>int dp[2][5010]; // 01 数组, 节约内存in...原创 2017-09-13 18:18:01 · 268 阅读 · 0 评论 -
1640 天气晴朗的魔法 (最小生成树Kruskal)
这样阴沉的天气持续下去,我们不免担心起他的健康。51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动。N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵。魔法链是做法成功与否的关键。每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和。由于逆天改命的魔法过于暴力,所以我们要求阵中的魔法链的魔力值最大值尽可能的小...原创 2018-04-30 21:51:47 · 319 阅读 · 0 评论 -
11882 - Biggest Number ( 深搜 )
题目链接:传送门思路: 以每个数字为起点去深搜,取在深搜过程中搜到的最大的 数。注意, 如果只用蛮力去深搜会超时,所以需要剪枝。剪枝需要用到广搜,就是你用深搜搜到某个点之后,先用广搜去计算 这个点继续深搜还能遍历所有的数字个数 a,假设现在Biggest Number 长度为 b, 搜到这个点已经深搜 的数的长度 c:两种情况:1. a+c < b 那么这个点...原创 2018-04-30 22:33:26 · 695 阅读 · 0 评论 -
CONTINUE...?
题目链接:传送门题意:四个组,G1、G2、G3、G4, G1和G2 只能分女生,G3和G4只能分男生。问能否合理分配,是G1,G3两个组中的人手里的宝石 和 G2,G4两个组中人手里的宝石个数相同。输入数据分析:n = 7, 这组数据表明一共 7 个人。1101001 。 这个字符串下标从 1 开始, 如 a[2] = 1,1 表明这个人是男生,如果 a[2] = 0 则...原创 2018-05-05 22:57:31 · 2221 阅读 · 0 评论 -
Cyclic Components (深搜)
题目链接:传送门题意: 给出一些无向图,问有多少个“纯粹”的单环,纯粹的环就是环中每个点只有两个邻接点。思路:环中每个点只有两个邻接点, 从这个点去突破问题,以每个点为起点去深搜,如果遍历这个点的邻接点,所有的邻接点(包括自身)如果都只有两个临界点,这就是一个纯粹的环,把所有遍历过的点标记,以后就不要再用这些点为起点去深搜,因为如果用这些点搜得的情况是重复的。参考代码:#inc...原创 2018-05-07 22:16:14 · 298 阅读 · 0 评论 -
2049 :压死骆驼的最后一根稻草 (模拟)
每个人 都有自己独有的计数方式 比如以下 字符串111123455可以表示为4个1,1个2,1个3,1个4,2个5.为了方便记忆就表示为4--1,1--2,1--3,1--4,2--5当然顺序肯定不能变换 计数方式可以表示为“a--b”的形式 在计数方式中相连的b互不相等且a与b不为0 独有的计数方式 如果转化为字符串 字符串的长度小于10的9次方给你下面的计数方式 例如...原创 2018-05-12 23:10:02 · 2100 阅读 · 0 评论 -
978E Bus Video System
The busses in Berland are equipped with a video surveillance system. The system records information about changes in the number of passengers in a bus after stops.Ifxxis the number of passenger...原创 2018-05-14 22:30:43 · 1472 阅读 · 0 评论