![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构及算法
经典的算法及数据结构题解分析
龍龍哥
这个作者很懒,什么都没留下…
展开
-
蓝桥杯 全球变暖(Java)
题目描述你有一张某海域NxN像素的照片,".“表示海洋、”#"表示陆地,如下所示:7….##….##……##.…####.…###.…其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。例如上图中的海域未来会变成如下样子:……………#………请你计算:依照科学家的预测,照片中有原创 2020-11-03 20:32:07 · 326 阅读 · 0 评论 -
bfs的迷宫问题再探索
何为bfs遍历迷宫算法bfs就是扩散问题,在每一个点,在条件允许的情况下,依次向下,右,上,左来进行扩散,因为是广度所以设计的方向广,触角也就触及的长,当某一触角率先触及到终点时,我们就认为找到了出口,然后利用回溯思想将这条走过的路记录下来。如何完成这一过程那么如何完成这一个过程,首先我们要利用一个flag标记数组,来记录自己是否走过这条路,并逐次加一,便于后期回溯,其次,我们要利用队列来记录每次向,四周扩散的应该是哪一个点,当所有点都扩散完毕时依旧没有找到出口,证明该迷宫不存在通路(遇到通路立原创 2020-10-09 20:51:00 · 130 阅读 · 0 评论 -
最大公共子序列的思路理解(java代码)
首先我们要区分公共子序列和公共子串的区别,子串一定是字符串中连续长度的串,但是子序列却并无此要求,只要按顺序出现的相同元素,就可算做相同子序列。首先给定两个字符串:“A B C B D A B"以及"B D C A B A”,在这里我们先排除掉暴力求解法来解决这个问题,我们可以将大规模的字符串给他拆分成小份的问题,我们记str1,str2分别为两个字符串,str1[i] 和 str2[j]分别代表字符串中的第i个元素和第j个元素。我们只需要在 i 和 j 分别表示字符串末尾最后一个元素时,只需判断他的原创 2020-08-09 16:02:30 · 197 阅读 · 0 评论 -
最大子序和 (Java)
典型的分治法,对大规模问题进行拆分,再逐渐合并得出答案package 算法;import java.util.Scanner;public class 最大子序和 { public static void main(String[] args) { int[] arr = new int[6]; Scanner in = new Scanner(S...原创 2020-04-16 21:19:42 · 215 阅读 · 0 评论 -
八皇后问题_枚举 (Java)
暴力枚举法解决八皇后问题,问题的关键在于如何记录皇后的位置,以及如何判断他们是不是按要求摆放。1.首先我们可以利用一位数组来表示皇后的位置(如a[1] = 2表示第一列第二行有一个皇后),当枚举各种摆放位置来更新这个一维数组。2.其次,要如何去判断他们是否摆放合适呢,还是对数组里存的值进行一次判断,首先我们可以确定的是每一列只可能有一个皇后,所以我们先判断他们的行是否有重复a[i] ==a[j...原创 2020-04-15 16:14:46 · 525 阅读 · 0 评论 -
残缺棋盘 分治法(Java)
这是一道很经典的分治法算法问题,要把一个很大的规模逐渐减小,然后依次解决他的子问题,问题的关键就是对棋盘不断二分,然后根据残缺的位置进行不同的处理。通过观察,只要初始残缺位置在哪个方向,我们最中心就会是几号板(因为那个方向已经缺省过一块,其他地方就必定要补满),然后利用递归,每次传人棋盘头位置和残缺位置。package 算法;import java.util.Scanner;public...原创 2020-04-14 21:58:51 · 619 阅读 · 0 评论 -
算法练习 活动安排问题(c)
解题思路:这是典型的贪心算法问题,即不考虑总体而注重局部最优解,我共分三个步骤来解题,首先如何将时间表输入程序,再就是要对时间表进行排序,在这里我是将结束时间作为基准去从小到大排序,最后再通过贪心算法,依次遍历寻找合适的活动,输出。#include <stdio.h> main(){ int arr[2][100]; int n; int i,j,end,temp;...原创 2020-04-08 16:15:36 · 511 阅读 · 0 评论 -
数据结构——二叉搜索树的简单实现(Java)
利用二叉搜素树能够帮助我们更好的理解树和排序相结合的思想,而且每次的遍历,无论是迭代还是递归,都很考察我们的逻辑思考能力,还是感觉要多多练习尝试去做。SearchTreeNode 类package 数据结构_二叉搜索树;public class SearchTreeNode { private int element; private SearchTreeNode left...原创 2020-03-04 20:49:55 · 98 阅读 · 0 评论 -
数据结构——二叉树再研究(Java)
基于上次初学java链表,简单的做了一个二叉树,这次重新做了一个较为完善的二叉树,包括定义树结点,实现二叉树的三种遍历,统计孩子结点,树高等操作,并将他们封装在LinkedBinaryTree类当中,只用创建对象,调用其相关方法即可实现各项操作。测试二叉树package 数据结构_二叉树;public class 实现二叉树的建立及遍历 { public static void m...原创 2020-03-03 20:15:31 · 113 阅读 · 0 评论 -
归并排序——MergeSort实现(Java)
根据大佬们的一些构思和做法,自己实现了归并算法,总体利用递归实现,空间消耗的还是比较大,mergesort方法的空间复杂度就在O(N).package 数据结构_排序;public class 归并排序{ public static void main(String[] args) { int[] arr = {1,8,36,5,2,4,6}; Mer...原创 2020-03-02 15:59:08 · 181 阅读 · 0 评论 -
自定义链表队列——LinkedQueue的实现(Java)
由于队列是一种线性集合,因此可以像处理栈一样,把队列实现成一种QueueNode对象的链表。队列与栈的主要差别在于,我们必须要操作链表的两端。于是,除了一个指向链表首元素的引用(head)之外,还需要跟踪另一个指向链表末元素的引用(tail)。还要用一个整型变量count来跟踪队列中的元素数目。定义结点package 数据结构_队列;public class QueueNode<T&...原创 2020-02-27 17:32:29 · 497 阅读 · 0 评论 -
自定义链表栈——LinkedStack的实现(Java)
栈的作用,用于创建栈的解决方案仍保持不变在上一篇博客中,我用数组来创建了ArrayStack< T >类来实现栈,但也可以该用其他任何有效的栈实现、除了类名之外不用改变其他任何东西。这正是抽象的美妙之处。只要有效地实现了恰当的操作,集合的任何实现都可用来求解问题定义结点对象package 数据结构;public class LinkedNode<T> { ...原创 2020-02-26 16:30:20 · 388 阅读 · 0 评论 -
自定义数组栈——ArrayStack的实现(Java)
我们定义一个名为ArrayStack的类来表示一个基于数组实现的栈,该栈存储的是范型T的对象栈的数组实现可以通过以下4个假设来设计:1.该数组是一个对象引用的数组(该数据类型在栈实例化时确定);2.栈底总是在数组的索引0处;3.栈的元素是按顺序并连续地存储在数组中;4.有一个整数变量top,该变量保存了紧跟栈顶元素后的数组索引号。(该类的创造来自于《Java软件结构与数据结构第四版》教...原创 2020-02-25 16:10:55 · 1501 阅读 · 0 评论 -
后缀表达式计算(Java栈练习)
栈结构是解决后缀表达式的一种很好的思路,基本思路就是,输入你要计算的表达式,挨个遍历,遇到数字就将他们压入栈中,遇到运算符再依次从栈中弹出两个数字,我们要保证数字的顺序,特别是计算除法和减法的时候更要注意。其次,因为运算数可能为负数,在字符串检测时,是无法将-3正确识别为负三的,所以在这里要额外处理负数符号。最后添加try,catch语句,能正确显示输入当中的错误。package 数据结构;...原创 2020-02-25 11:58:30 · 454 阅读 · 0 评论 -
二叉树遍历 (Java)
package 数据结构;public class 二叉树遍历 { public static void main(String[] args) { selectTree tree = new selectTree(); TreeNode root = new TreeNode(1,"刘备"); tree.setRoot(root); TreeNode root1 = ...原创 2020-02-22 15:35:47 · 129 阅读 · 0 评论 -
c语言对于图的存储(领接矩阵)及遍历(DFS,BFS)
这里介绍用邻接矩阵存储无序图,以及利用深度遍历和广度遍历对存储的图进行遍历。详细步骤会进行注释解析。#include <stdio.h>#define MAX 20typedef int Vertex; Vertex visit[MAX] = { 0 }; //定义两个全局数组,在遍历时用于判读该点是否已...原创 2019-11-20 23:22:37 · 791 阅读 · 0 评论