
java
文章平均质量分 72
Rebright-崇明
神说要有光,于是便有了我
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
搜索算法(二)--DFS/BFS求解炸弹人问题(JAVA )
炸弹人问题问题描述:小人可以在迷宫中任意地方放置一个炸弹,炸弹可以在以该点为中心的十字方向杀死怪物,但是触碰到墙之后不再能传递攻击。求将一个炸弹放在哪个位置可以杀死更多的怪物??Input: 13 13##############GG.GGG#GGG.####.#G#G#G#G##.......#..G##G#.###.#G#G##GG.GGG.#.GG##G#原创 2018-01-10 12:45:32 · 836 阅读 · 0 评论 -
动态规划之背包问题(JAVA)
背包问题之前的C语言版本已经将思路解析的差不多,虽然还有些许错误需要改正,但大体思路是正确的,需要的读者请参阅动态规划之背包问题(C语言) 背包问题本身就是典型的动态规划问题,所以这里只给出动态规划的算法。0-1背包思路一:常规做法import java.util.Scanner;public class Main { static Scanner in = new原创 2017-12-18 21:59:26 · 1067 阅读 · 0 评论 -
Java集合类及常用数据结构
下面这个图示为JAVA的集合类关系图,没用用严格的UML,了解其中的关系即可,其中颜色强调的几个类为常用的集合类。原创 2018-01-07 18:54:00 · 737 阅读 · 0 评论 -
高效幂运算(JAVA)--拆分解法、二进制解法
高效幂运算问题描述:假设有一机器能够存储这样一些大整数(或有一个编译程序能够模拟它),求一个相对大的数字(一般为400位左右)的极大幂(400位左右)显然我们可以使用Java内置函数pow()求解,但是这大概会需要进行10^400次乘法,而下面这种方法在最坏的情形下只需要大约2600次乘法拆分解法public class Pow { public static void原创 2017-11-09 20:47:46 · 2567 阅读 · 0 评论 -
求最大公约数——欧几里得算法(JAVA)
欧几里得算法问题描述:给出两个数m,n,求解这两个数的最大公因数由于算法比较简单,这里不再赘述,我做的这个算法是默认了m>n,如果是对于任意两个数来说的话,我们这里还需要一个比较大小。public class Gcd { public static void main(String[] args) { long m = 100; long原创 2017-11-09 18:23:14 · 3589 阅读 · 1 评论 -
查找算法——折半查找(JAVA)
折半查找问题描述:给定一个整数X和整数A0,A1,A2……A(n-1),后者已经预先排序并在内存中,求下标i使得Ai = X ,如果X不在数据中,则返回i = -1。我们首先可以想到的一种方法就是从左到右遍历,逐个匹配,运行花费线性时间。然而,这样的算法并没有考虑到题目中已经排序的这个事实,所以这种算法不能算是最优解。那么这里就引入了我们的折半查找,每次验证X是否是居中元素,如果是,即原创 2017-11-09 18:18:22 · 698 阅读 · 0 评论 -
最大子列和问题(JAVA)
最大子列和问题描述:给定N个整数的序列{A1,A2,A3,……,An},求解子列和中最大的值。这里我们给出{-2,11,-4,13,-5,-2}这样一个序列,正确的最大子列和为20该题是在数据结构与算法中经常用于分析时间复杂度的典型题目,以下将给出四种方法来求解一、三层循环——穷举法(时间复杂度O(N^3)) 这种方法的思路就是将每一个子列和都求出来,然后找出最大子列原创 2017-10-28 18:27:01 · 2070 阅读 · 1 评论 -
深入浅出讲算法思想--蛮力法思想分析及应用
蛮力法(brute force method,也称为穷举法或枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述,所以,蛮力法也是最容易应用的方法。虽然,用蛮力法设计的算法时间特性往往也是最低的,但是许多问题我们一开始并没有很优化的算法,而蛮力法则可以帮助我们从低效的算法结构中剖析低效的缘由,进而提炼出更为优化的算法。蛮力法在排序算法中的应用(选择,冒泡)蛮力法在查找算法中的原创 2018-02-01 20:20:20 · 10473 阅读 · 0 评论 -
图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )
一、Dijkstra算法问题描述:求一个点到任意个点的距离 思路:单源最短路径问题,使用Dijkstra算法 Input: 6 9 1 2 1 1 3 12 2 3 9 2 4 3 3 5 5 4 3 4 4 5 13 4 6 15 5 6 4Output: 0 1 8 4 13 17import java.util.Scanner;...原创 2018-01-11 17:53:38 · 1942 阅读 · 0 评论 -
JAVA刷题方法整理
JAVA刷题方法整理一、String—>String[]利用String.split()实现 注:在使用String.split 方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果,例如“|”,“*”,“+”等,需要变为“\\|”,“\\*”,“\\+”才可以。 String str = new String("abcedfg"); St...原创 2017-11-01 19:58:47 · 5814 阅读 · 0 评论 -
JAVA应试技巧----大数开方
大数开方--牛顿迭代法:如果一个数的位数为偶数个,那么这个数开方之后就有n/2位;如果一个数的位数为奇数个,那么这个数开方之后就有n/2+1位;我们以num=1000为例,位数为4,偶数,那么开方之后就有2位。我们从高位开始枚举。首先枚举十位:10*10=100 < 100020*20=400 < 100030*30=900 < 100040*40=1600 > 1000则...原创 2018-03-09 15:53:15 · 1296 阅读 · 1 评论 -
图论算法(四)--最小生成树的Kruskal [ 加边 ] 、Prim [ 加点 ] 的解法(JAVA)
之前我们介绍了求最短路径算法,现在又讲最小生成树算法,这两个算法有什么区别呢?首先要明确,最短路径和最小生成树是两个不同的概念。 最短路径是对于一个图的两个结点而言的。在一个图中,结点A通过某些结点和边可以走到结点B,这些结点和边组成的从A到B的路径中,最短路径就这些路径中权值总和最小的那一条(或多条)。 最短路径常用算法有:Floyd、Dijkstra、SPFA、A*等最小生成树是对原创 2018-01-12 21:23:05 · 1615 阅读 · 0 评论 -
堆的应用--并查集解决“擒贼先擒王”问题(JAVA)
现在有10个强盗。 1号强盗与2号强盗是同伙。 3号强盗与4号强盗是同伙。 5号强盗与2号强盗是同伙。 4号强盗与6号强盗是同伙。 2号强盗与6号强盗是同伙。 8号强盗与7号强盗是同伙。 9号强盗与7号强盗是同伙。 1号强盗与6号强盗是同伙。 2号强盗与4号强盗是同伙。 另外,强盗同伙的同伙也是同伙。你能帮助警方查出有多少个独立的犯罪团伙吗?Input: 10 9原创 2018-01-12 19:44:30 · 308 阅读 · 0 评论 -
搜索算法(三)--DFS/BFS求解宝岛探险问题(JAVA )
宝岛探险问题问题描述:某片海域有诸多岛屿,用0表示海洋,1-9表示陆地,现给定一个岛屿上的坐标点,求解所在岛屿的面积思路:显然这是一个搜索算法,即只要从当前坐标点开始遍历,每遍历到一个点进行计数即可,但是要注意sum的初始值为1!!!Input: 10 10 1 2 1 0 0 0 0 0 2 3 3 0 2 0 1 2 1 0 1 2 4 0 1 0 1 2 3 2 0 1原创 2018-01-10 15:13:21 · 628 阅读 · 0 评论 -
最短路径问题总结,时间复杂度,空间复杂度对比(JAVA)
最短路径问题总结图中还有些地方没有完善,但是一时也没没办法解决,希望大家知道的能够提供一下表中不足的地方,万分感谢!!!最短路径算法(一)–DFS/BFS求解(JAVA )最短路径算法(二)–Dijkstra和Floyd-Warshall单源、多源最短路径(JAVA )最短路径算法(三)–[ 带负权值图 ]Bellman-Flod的解法(JAVA )原创 2018-01-11 21:41:58 · 11155 阅读 · 1 评论 -
树--树的基本性质(JAVA)
前几篇文章介绍了图的搜索算法,最短路径算法,接下来介绍树:树和图 树实际上就是不含回路的无向连通图虽然树不连通,没有回路了,但是这也使得树这种数据结构有了更多的特性: 1.一棵树中的任意两个结点有且仅有唯一的一条路径连通 2.一棵有n个结点的树,那么它恰好有n-1条边 3.在一棵树中加入一条边会构成一个回路二叉树与树 二叉树是每个节点最多有两个子树的树结构二叉树的性质原创 2018-01-12 10:52:08 · 718 阅读 · 0 评论 -
搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA)
拯救同伴问题问题描述:假设有如下迷宫,求解从某一点出发到目标位置的最短距离Input: 5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3Output: 7深度优先搜索(DFS)import java.util.Scanner;public class DFS { static int[原创 2018-01-07 20:14:23 · 273 阅读 · 0 评论 -
图论算法(三)--最短路径 的Bellman-Flod [ 带负权值图 ] 的解法(JAVA )
Bellman-Flod算法对于带有负权值的图,我们已经不能通过Dijkstra算法进行求解了 原因:Dijkstra每次都会找一个距源点(设为s)最近的点,然后将该距离定为这个点到源点的最短路径;如果一个顶点u被加入了book[i])( book[i] == 1 说明这个s到u的路径权值已被记录,不可再更改),但是如果存在v到u的权值为负,那么s经v到u到值要更小。 例如: 如果用原创 2018-01-11 20:41:17 · 1726 阅读 · 1 评论 -
图论算法(五)--求解割点、割边(JAVA)
割点:对于一个连通图来说,如果删除某个点之后图不再连通,这个点就称为割点 割点算法 时间复杂度:O(N+M) 但是下面给出的算法时间复杂度为O(N^2),这是因为下面的存储结构都是邻接矩阵,这样的话用该算法就完全失去了意义,毕竟如果使用邻接矩阵完全可以通过删除一个点,然后进行DFS/BFS遍历即可了。所以在实际应用中还是要使用邻接表来保存数据,这样时间复杂度可以达到O(N+M) Input原创 2018-01-12 22:45:06 · 1923 阅读 · 0 评论 -
图论算法(六)-- 二分图的最大分配问题(JAVA)
二分图:又称二部图,如果一个图的所有顶点可以被分为X和Y两个集合,并且所有边的两个顶点恰好一个属于一个集合X,另一个属于集合Y,即每个集合内的顶点没有边相连,那么这个图就是二分图。 二分图的最大分配问题就是,在所有的分配中,可以输出分配数最多的,但是这样的求解方式效率很低。下面我们引入“增广路”的概念 增广路的本质就是一条路径的起点和终点都是未被配对的点,增加一条增广路就是增加一条配对路线。而原创 2018-01-12 23:00:56 · 1926 阅读 · 0 评论 -
排序算法(一)--桶排序、冒泡、快排(JAVA)
排序算法汇总参考书籍–《啊哈!算法》 作者:啊哈磊首先提出一个问题:班内有5名同学,成绩分别为5,8,2,4,2分(满分10分),需要将成绩从小到大排序简化版 桶排序 时间复杂度O(N)import java.util.Scanner;public class Bucket_sort { public static void main(String[] args)原创 2018-01-07 16:40:09 · 270 阅读 · 0 评论 -
图论算法(一)--最短路径的DFS/BFS解法(JAVA )
最短路径–城市路径问题:问题描述:求从1号城市到5号城市的最短路径长度 Input: 5 8 1 2 2 1 5 10 2 3 3 2 5 7 3 1 4 3 4 4 4 5 5 5 3 3 Output: 9DFSimport java.util.Scanner;public class minPath { static原创 2018-01-11 10:03:03 · 5798 阅读 · 4 评论 -
排序算法(二)--堆排序(JAVA)
堆的一个很重要的应用就是堆排序,和快速排序一样,堆排序的时间复杂度也是O(NlgN) 堆排序的实现思路一: 1.创建小根堆 2.每次删除顶部元素并将顶部元素输出(删除的函数中有调整的过程,每次调整) 时间复杂度:O(N·logN)Input: 14 99 5 36 2 19 1 46 12 7 22 25 28 17 92Output: 1 2 5 7 12 17 19原创 2018-01-12 11:30:34 · 180 阅读 · 0 评论 -
蓝桥杯第八届省赛JAVA真题----9数算式
标题:9数算式观察如下的算式: 9213 x 85674 = 789314562 左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。 而乘积恰好也是用到了1~9的所有数字,并且每个1次。 请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?注意: 1. 总数目包含题目给出的那个示例。 2. 乘数和被乘数交换后作为同一方案来看待。 1625解析:要关...原创 2018-03-31 08:24:03 · 603 阅读 · 0 评论