![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 89
七十一Li
这个作者很懒,什么都没留下…
展开
-
买股票的最佳时机三种解决方法java实现
昨天在力扣遇到的这个题目,我自己使用的超级蠢的是暴力法,然后优化,两个for循环变一个,后来看了别人的解题思路,有一个很有趣的地方。一个问题如果换个思考问题的角度,也许就能找到更高效的方法,我觉得对我以后解题会有帮助,记录之。我自己也是个初入坑,学过算法设计分析但是上课没怎么好好听。题目如下1.暴力解题法昨天在力扣遇到的这个题目,我自己使用的是暴力法,就是拿第 i 天股票价格减去前 i -...原创 2020-03-10 17:59:26 · 400 阅读 · 1 评论 -
动态规划入门详解java实现
一到经典且简易的动态规划问题 5 //表示三角形的行数 接下来输入三角形 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上...原创 2020-03-09 09:52:08 · 1378 阅读 · 0 评论 -
常见排序算法之堆排序
1.简介 堆排序是指利用堆这种数据结构所设计的一种排序算法。2.堆排序中大堆和小堆 大堆:根节点比子节点大 小堆:跟节点比子节点小3.核心思想 数组转完全二叉树,先把待排序的序列构成一个大顶堆, 将堆顶根节点和末尾节点互换 把剩下的n-1个元素重新构造成大顶堆, 再次交换堆顶根节点和末尾节点.... 重复操作直到最后只剩下一个数4.步骤 (1).首先构造大堆 (2)...原创 2020-03-07 11:48:17 · 132 阅读 · 0 评论 -
常见排序算法之二分插入排序算法
1.算法思路是在插入第i个元素时(i前面的元素必定是有序的),对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。2.特点分析二分法直接插入排序算法是插入排序的升级版本,但是时间复杂度和直接插入算法一样都是O(n²)...原创 2020-03-06 12:31:41 · 1535 阅读 · 0 评论 -
常见排序算法之希尔排序算法
1.希尔排序简介1.介绍: 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”, 是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法2.核心思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序; 随着增量逐渐减少,每组包含的关键词越来越多, 当增量减至1时,整个文件恰被分成一组,算法便终止 3.空间...原创 2020-03-03 22:23:15 · 200 阅读 · 1 评论 -
常见排序算法之直接插入算法
最近在复习各类常用算法,从排序算法开始。插入排序的直接插入排序算法,算法思路相对简单,适合于小规模的或者有序性比较高的数据集合,核心思想:其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。1.思路解析如下:原素组为: 9 3 2 6 102.代码如下import java.util.Arrays;/* 直接插入算法 ...原创 2020-03-01 23:25:28 · 241 阅读 · 0 评论 -
JAVA数据结构------------------拓扑排序
拓扑排序介绍拓扑排序是一个比较常用的图论算法,经常用于完成有依赖关系的任务的排序。比如如下图例题:在图中,v2要想执行就必须先执行v3和v1,v0事件就可以直接执行,不需要依赖其他事件是否执行完成。依赖关系就好比打游戏,你要先选择英雄,才能进入游戏,v0就是选择英雄,v4就是进入游戏这个样子。拓扑排序就是来解决这样的问题,在不影响依赖关系的基础上,将图遍历。代码实例我们就以上面的例题为例...原创 2019-10-23 22:36:45 · 217 阅读 · 0 评论 -
JAVA数据结构----------Dijstra(迪杰斯特拉)图最短路径算法
算法简介迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止,是贪心算法的一种,但由于dijkstra算法主要计算从源点到其他所有点的最短路径,所以算法的效率较低。算法思路步骤下述代码是根据c语言改编过来的,大体思路如下1.开始构建shortTablePath[]数组,...原创 2019-10-19 14:55:07 · 351 阅读 · 0 评论 -
JAVA数据结构------------超详细讲解Kruskal(克鲁斯卡尔算法)图的遍历和最小生成树
最近复习到了数据结构中图的遍历和最小生成树部分,我在这里记录用java写的Kruskal算法,方便自己回顾,并且与他人交流学习。关于Kruskal算法的理论部分我就不再陈述了 直接上代码:/** * * 使用克鲁斯卡尔算法来实现图的最小生成树 * * 克鲁斯卡尔锁使用的时边集与普里姆算法的顶点集不同,因此不能使用临接矩阵来表示图 * * 算法思想:1.先将边按照 权值大小 ...原创 2019-10-11 17:47:02 · 273 阅读 · 0 评论 -
JAVA数据结构--------Prim(普里姆算法)图的遍历和最小生成树
最近复习到了数据结构中图的遍历和最小生成树部分,我在这里记录用java写的prim算法,方便自己回顾,并且与他人交流学习。关于prim算法的理论部分我就不再陈述了 直接上代码:/*** * 使用普里姆算法生成最小生成树 * @author 65481 * */public class PrimGraph { //顶点数量 private int vertexSize; //...原创 2019-10-10 16:10:54 · 408 阅读 · 0 评论 -
JAVA 实现二叉树,二叉树的递归遍历(前 中 后),二叉树的非递归遍历(先序 中序 后序),测树的深度和大小的方法
最近在复习数据结构 二叉树。现在用的是Java 语言, 代码实现了测量深度和大小的 方法。最主要的 是二叉树的 遍历 。用了非递归和 递归的方法 来实现二叉树的先序、中序、后序遍历。代码和注释如下:import java.util.Stack;/* * 此类 构造了二叉树 以及二叉树的递归遍历与非递归遍历 */public class BinaryTree { //根节...原创 2019-05-26 16:23:43 · 235 阅读 · 0 评论 -
java 详细源码分析 ——ArrayList的顶部注释,域,构造方法
因为上学期的数据结构学的不好,所以这个学期需要回顾一下 。因为ArrayList是基于动态数组的线性表,了解ArrayList的原理不仅可以更好的使用它,对于数据结构的学习也有一定的帮助。------------------------------------------------------------------------------------------------------分割线...原创 2019-05-07 22:56:15 · 152 阅读 · 0 评论 -
序列化和反序列化 && java中的 关键字transient
文章目录1.在此之前我们需要了解一下什么是序列化和反序列化之前在研究java中ArrayList源码。在ArrayList的域中有 transient Object[] elementData (Object类型的数组elementData被transient修饰)。此处黑人问号?关键字transient是啥?1.在此之前我们需要了解一下什么是序列化和反序列化把对象转换为字节序列的过程称为对...原创 2019-05-07 22:36:24 · 185 阅读 · 0 评论 -
java 抽象类和接口的区别
1.抽象类需要注意的情况1.抽象类是不能创建对象的,要创建对象时,必须通过子类继承后,由子类来创建对象,抽象类中,可以有一个或者多个抽象方法,也可以没有抽象方法。2.抽象类中并不是只有抽象方法,也可以由具体的成员变量和成员方法。3.如果在一个类中含有抽象方法,那么这个类必须被声明成抽象类。4.子类继承抽象类后,必须实现抽象类中所有的抽象方法。2.抽象类和接口的不同之处为了实现多继承,引...原创 2019-05-13 23:47:28 · 295 阅读 · 0 评论 -
并发下ArrayList为何会出现越界 & 为何用vector代替ArrayList & 使用vector线程一定是安全的嘛?
最近看到书上讲到并发下ArrayList是不安全的可能会导致越界,多线程冲突访问的问题,建议改进的方法是使用vector 代替 ArrayList。脑袋里浮现出几个问题:1.Arraylist是如何导致越界的问题?2.vector是如何保证线程的安全的?3.使用vector线程就一定安全吗? 4.vector和ArrayList分别适合在什么场景下使用1.ArrayList如何导致越界问...原创 2019-03-28 19:16:33 · 1235 阅读 · 0 评论 -
java并发 浅显易懂的synchronized讲解
为什么要使用关键字synchronized?程序的并行化是为了提高效率,但是不能以牺牲正确性为代价。在java中volatile关键字不能真正的保证线程的安全性,volatile不能代替锁,它无法保证一些符合操作的原子性。它只能确保一个线程修改了数据之后,其他的线程能够看到这个改动,但是当两个线程同时修改某一个数据时,却会产生冲突。下面为演示代码:public class Accounti...原创 2019-03-25 19:39:29 · 150 阅读 · 0 评论