![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
进击的NULL
理论不懂就实践,实践不会就学理论
展开
-
最小生成树问题——Kruskal算法实现
问题介绍有一天我看到这么一个描述:古时候的镖局(相当于现在的快递公司)要押镖,然后有一张地图。地图上面清晰的标记了从A城市出发到B城市的每一条线路,所经过的每个城市。但是由于古时候绿林好汉太多了(还是社会主义好啊,扯远了~~~),两两城市之间绿林好汉收取的保护费是不一样的,所以这就导致压镖成本不同,那么怎样设计镖局所在地,才能使镖局能到达所有城市且打点绿林好汉的成本最少。问题描述完了,有没有觉得...原创 2019-01-10 15:32:33 · 1082 阅读 · 0 评论 -
链表常用套路:快慢指针
前言使用多个指针是解决链表问题的常用套路(诸如反转链表需要三个指针前中后、默认在head节点前添加一个pre空节点等),其中有两个比较特殊的指针分别是slow指针和fast指针,也叫快慢指针。由于在很久以前初识这个套路就被其精妙之处吸引,随着理解加深,便于自己查询,特此作问记之。原理简介快慢指针顾名思义,即一个移动的比较快的指针和一个移动的比较慢的指针。实际运用中这么写:slow = ...原创 2019-04-17 18:30:04 · 1702 阅读 · 0 评论 -
有20个数组,每个数组里面有500个数,升序排列,求出这10000个数中的最大500个数。并求复杂度。【百度2012年的一道算法题】
题目描述有20个数组,每个数组有500个升序排列的数,求出这10000个数中前500个最大的数,并求复杂度。解题思路用一个大小为20的最大堆,通过维护这个堆,每次选出一个最大的数,如此往复500次,所以时间复杂度500 * log(20)代码这道题比较有意思的是利用最大最小堆求解,以及求解最大堆解决的复杂度。代码分为两个部分,第一部分是我自己写的一个简略最大堆作为基础数据结构: MaxH...原创 2019-01-26 12:02:51 · 1279 阅读 · 0 评论 -
记一次时间优化尝到的甜头 —— 一次急忙的提交
匆忙写了一道计算题,直接上代码:import java.util.Scanner;public class Main { public static boolean[] isWP = new boolean[10001]; // 存储是否素数的数组,true表示下标值对应的是素数 public static void main (String[] args) { ...原创 2019-01-15 22:02:04 · 110 阅读 · 0 评论 -
解决带负权边的最短路径算法——BellmanFord算法
代码import java.util.Scanner;/** * 解决带负权边的最短路径算法——BellmanFord * @author XZP * */public class BellmanFord { public static void main(String[] args) { int INF = 9999; // 定义一个认为的最大值 Scanner sc...原创 2019-01-09 11:17:08 · 1226 阅读 · 0 评论 -
Java手撸“单源”最短路径算法——Dijkstra算法
代码import java.util.Scanner;/** * 从键盘输入一张图,用Dijkstra算法求解指定两点之间的距离,为了统一顶点编号也从0开始 * 当然还有一些地方可以用堆、邻接表来优化,这里关注点不在此。 * @author XZP * 一组测试数据: 6 9 0 2 0 1 1 0 2 12 1 2 9 1 3 3 2 4 5 3 2 4 3 4 1...原创 2019-01-09 11:16:25 · 234 阅读 · 0 评论 -
记录一个只有五行的最短路径求解算法——FloydWarshall
核心思想结合动态规划思想,通过不断迭代中转点k后两点i、j之间的最短路径来求解。代码及注释package others;/** * 只有五行的最短路径求解算法 ——FloydWarshall * @author XZP * 0表示自身 * INF表示图中两点不可达 * 大于零的数字表示两点直接的直接距离 * */public class FloydWarshall {//...原创 2019-01-09 11:15:33 · 191 阅读 · 0 评论 -
作者在“拯救大兵瑞恩”时遇到的问题小记——迷宫最短路径
问题描述约翰·米勒上尉接到上级命令,要去一个迷宫拯救被困其中的大兵瑞恩。迷宫由空地格子和障碍物——墙组成。现在米勒从(1,1)这个地方降落并进入迷宫,问找到瑞恩的最短路径。通过卫星定位到瑞恩所在坐标为(p, q)处,让你求解。代码/** * 约翰·米勒上尉接到上级命令,要去一个迷宫拯救被困其中的大兵瑞恩。*迷宫由空地格子和不可穿透的墙组成。现在米勒从(1,1)这个地方降落并进入迷宫,问找...原创 2019-01-08 11:55:30 · 249 阅读 · 0 评论 -
记录一种用数学解题的思路:寻找多数元素
问题描述假如现在有一个序列,已知其中一个数出现的次数超过了50%,请你找出这个数。比如序列3, 3, 1, 1, 2, 3有趣的点归根结底算法问题还是数学问题:如果n / m > 1 / 2,那么当M > 0时有:(n + M) / (m + M) > 1 / 2,证明比较简单,反之亦然用已有知识折腾未知问题本地解法多样,不作详述,关键在于逐步深入问题...原创 2019-01-08 11:53:15 · 200 阅读 · 0 评论 -
一道简单的“小猫钓鱼”游戏算法
“小猫钓鱼”纸牌游戏规则描述将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。(*——*这不就是作者小时候喜欢玩的...原创 2019-01-08 11:51:49 · 2705 阅读 · 0 评论 -
无向连通图中“割边”、“关键桥”问题的Java实现
同割点问题(参见我的上一篇博客)类似,割点问题(也叫关键桥问题)描述的是在无向图中,倘若去掉某条边之后,原连通图被分割为两个不可达的图,则该条边就是所谓的割边。跟割点唯一不同的就是原本low[v] >= num[u]的判定条件变为了low[v] > num[u],也就是要满足子节点v现在连父节点u都不能到达,那么两节点组成的边就是割边!代码:package cut.edge;im...原创 2019-01-12 12:11:09 · 484 阅读 · 0 评论 -
浅谈java中: short s = s + 1和s += 1的区别
摘要在这篇文章中,我会结合自己遇到的疑惑,分析题目中的问题,并简要总结java中数据类型相关的知识,供交流学习。关键字java, 数据类型, 默认类型,运算符优先级、类型溢出正文不知读者们是否会像作者同样的错以为:题目中两者没有啥区别!由于我们在平时的编程中很少涉及类型溢出、优先级考虑等问题,加上林林总总的数据类型、包装类、又是单目运算符,又是三元运算符,脑子都绕晕了,所以忽略了这类问...原创 2019-01-07 13:24:26 · 1815 阅读 · 0 评论 -
动态规划经典问题二:最长增长子序列(Longest Increasing Subsequence)
题目描述广场上站着一支队伍,她们是来自全国各地的扭秧歌代表队,现在有她们的身高数据,请你帮忙找出身高依次递增的子序列。 例如队伍的身高数据是(1、7、3、5、9、4、8),其中依次递增的子序列有(1、7),(1、3、5、9),(1、3、4、8)等,其中最长的长度为4。输入描述:输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000)。紧接着第二行包含n个正整数m(1≤n≤100...原创 2019-01-07 13:23:37 · 303 阅读 · 0 评论 -
动态规划(Dynamic Programming)
题目描述我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。现在给你两个任意字符串(不包含空格),请帮忙计算它们的最长公共子序列的长度。输入描述:输入包含多组数...原创 2019-01-07 13:22:37 · 180 阅读 · 0 评论 -
幸运数字问题 —— Java实现
题目描述小雅同学认为6,8是她的幸运数字,而其他数字均不是,一个幸运数是指在十进制表示下只含有幸运数字的数。给定你一个区间(a,b)a和b之间(其中包括a和b幸)运数的个数。输入描述输入两个整数a和b,a的取值范围在1和1000000000之间(其中包括1和1000000000),b的取值范围在a和1000000000之间(其中包括a和1000000000)。输出描述返回a和b之间的幸运...原创 2019-01-17 12:30:25 · 1663 阅读 · 0 评论 -
Java实现无向连通图中的“割点”问题
直接上代码,详细请见注释或者下方留言。package cut.point;import java.util.Scanner;import java.util.Stack;/** * "轰炸重要城市"问题: * 假设当前我们拥有一个 地区的城市地图,但是只有一个原子弹,为了让这颗原子弹发挥最大的效果,要阻断这个地区各个城市中最关键的一个交通要塞,那么这个原子弹该投放在哪里? * 其...原创 2019-01-11 12:54:05 · 520 阅读 · 0 评论 -
LeetCode #215 求数组中第k大的数 有趣的一个小细节
问题描述Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.翻译过来:给你一个无序的整数数组,求其中第k大的数。比如下面的一组输入(第一行)和输出(第二行):In...原创 2019-05-16 21:04:29 · 556 阅读 · 0 评论