自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IOSSHAN的博客

坚持原创

  • 博客(20)
  • 收藏
  • 关注

原创 数据结构与算法---排序---归并排序

归并排序(Merge Sort)1945年由冯诺依曼首次提出。执行流程1 不断的将当前序列平均分割成两个子序列直到不能再分割(序列中只剩1个元素)2 不断的将两个子序列合并成一个有序序列直到最终只剩下1个有序序列归并排序,主要有分和和两个步骤。其中,分感觉好理解些,找出begin,end,求出middle,然后递归调用,直到元素个数小于或等于1时,不再分割。不难写出:public static void divideSort(int[] array, int begin, int end

2020-09-30 14:58:07 208

原创 数据结构与算法---排序---插入排序、二分搜索

插入排序(Insertion Sort)插入排序非常类似于扑克牌的排序执行流程:1 在执行过程中,插入排序会将序列分为两部分:头部是已经排好序的,尾部是待排序的。2 从头开始扫描每一个元素每当扫描到一个元素,就将它插入到头部合适的位置,使得头部数组仍然保持有序。不难写出代码:public class sort { public static void main(String[] args) { int[] array = {19, 18, 67, 199, 6, 56}; in

2020-09-29 22:33:09 316

原创 数据结构与算法---排序---选择排序、堆排序

选择排序(Selection Sort)选择排序大致就是,每次循环找出最大值,然后与最后一个元素进行交换。然后再在除最后一个元素的数组里面,再找出最大值,与倒数第二个元素进行交换,以此类推。执行流程:1 从序列中找出最大的那个元素,然后与最末尾的元素交换位置。执行完一轮后,最末尾的那个元素就是最大的元素2 忽略1中曾经找到的最大元素,重复执行步骤1不难写出代码:public class test { public static void main(String[] args) {

2020-09-28 23:43:43 214

原创 《学习敏捷:构建高效团队》笔记摘要

#《学习敏捷:构建高效团队》笔迹摘要什么是敏捷敏捷是指能够让团队思考更加有效、工作更高效,并且作出更好决策的一组方法和相关理念这些方法和理念适用于传统软件工程的所有领域,例如项目管理、软件设计、软件架构和流程改进。每种方法和理念都包括实践。这些实践经过了精简和优化,应用起来非常方便。敏捷也是一种思维模式,思维模式的正确与否会影响团队具体实践的高效程度。正确的思维模式有助于团队成员共享信息,从而共同作出重要的项目决策。敏捷思维模式涉及整个团队的开工计划、设计和流程改进。敏捷的创造者在试图找到解决问题

2020-09-28 18:10:34 418

原创 数据结构与算法---排序---冒泡排序

各个排序的时间复杂度

2020-09-28 15:45:20 265

原创 数据结构与算法---哈夫曼树、字典树

哈夫曼编码哈夫曼编码,又称为霍夫曼编码。它是现代压缩算法的基础。假设要把字符串【ABBBCCCCCCCCDDDDDDEE】转成二进制编码进行传输,那么,可以转成ASCII编码(65 ~ 69,1000001 ~1000101),但是有点冗长。如果希望编码更短呢?可以先约定5个字母对应的二进制对应的二进制编码:000001001001010010010010010010010010011011011011011011100100 这样,一共20个字母,转成了20*3 = 60个二进制位如果使用

2020-09-23 15:33:24 759

原创 数据结构与算法---堆

需求假如我们现在要设计一种数据结构,用来存放整数,要提供三个接口:添加元素、获取最大值、删除最大值我们可以使用动态数组或者双向链表来做。获取最大值:需要遍历整个数组或者链表,因此,时间复杂度为O(n)删除最大值:需要遍历整个数组或者链表,因此,时间复杂度为O(n)添加元素:默认是添加到最后。动态数组添加在最后,在知道数组size的情况下,添加元素的时间复杂度为O(1)双向链表添加在最后,由于双向链表有first和last指针,因此,可以直接找到最后的元素,所以,添加元素的时间复杂度为O(1)

2020-09-22 21:55:11 433

原创 数据结构与算法---哈希表

需求假设一个写字楼要统计所有公司的电话,要做成一个通讯录那么,一个电话号码对应一个公司。则,电话号(8位)作为key,公司详情作为value要求,添加、删除、查找的时间复杂度为O(1),如何存储数据,做到满足这个需求?如果是添加、删除、查找的时间复杂度都是O(1),目前我们学习到的:线性表:数组、链表、栈、队列非线性表:树、图、集合、映射数组的查找时间复杂度是O(1)在不改变数组的位置时,仅仅是在数组中添加某个元素,删除某个元素,而其他元素不做改动的前提下,数组的添加、删除只需要找到该元素

2020-09-20 10:41:21 364 1

原创 数据结构与算法---树

树的基本概念节点、根节点、父节点、子节点、兄弟节点一棵树可以没有任何节点,称为空树一棵树可以只有1个节点,也就是只有根节点子树、左子树、右子树节点的度(degree):子树的个数树的度:所有节点度中的最大值叶子节点:度为0的节点非叶子节点:度不为0的节点层数(level):根节点在第1层,根节点的子节点在第2层,以此类推节点的深度(depth):从根节点到当前节点的唯一路径上的节点总数节点的高度(height):从当前节点到最远叶子节点的路径上的节点总数树的深度:所有节点深度中的最大

2020-09-14 23:12:48 280 1

原创 数据结构与算法---树---二叉树的前驱节点、后继节点

前驱节点何为前驱节点?前驱节点,指的是以中序遍历,遍历二叉树,某一个节点的前一个节点,被称为其前驱节点。也就是,某一节点的左子树的右子节点的右子节点的右节点。。。特殊情况,如果是二叉搜索树,则前驱节点是按从小到大的顺序,比其前面一个节点。思路:如果node.left != null;则循环,node.left.right.right.right…直至为空,则找到了其前驱节点。如果node.left == null;如果node.parent == null;则没有前驱如果node.par

2020-09-13 09:35:23 3857

原创 数据结构与算法---树---判断一棵树是否为完全二叉树

如何判断一个树是否为完全二叉树完全二叉树,叶子节点只会出现最后2层,且最后1层的叶子节点都靠左对齐或者一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。用程序判断的大概思路:如果树为空,则返回false如果树不为空,则层序遍历该二叉树:如果该节点的左右子节点都不为空,则入队。如果该节点的左子节点为空,右子节点不为空,则一定不是完全二叉树如果该节点的左子

2020-09-13 00:19:31 616 1

原创 数据结构与算法---树---翻转二叉树、二叉树的高度

翻转二叉树翻转二叉树需要借助层序遍历二叉树然后在层序遍历到的每一个节点,将其左右两个节点进行替换//翻转二叉树 public static void travelBT(TreeNode root) { if(root == null) return; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while(!queue.isEmpty()) { TreeN

2020-09-11 15:16:44 188

原创 数据结构与算法---树---前、中、后、层序遍历二叉树

144. 二叉树的前序遍历抛开这道题,如果只是简单的打印二树的前序遍历节点值还是很简单的。但,如果加上将值放入数组再返回,还是有难度的。我们从简到难对于前序、中序、后序遍历,最简单的莫过于递归前序、中序、后序遍历(递归)public class Source { public static void main(String[] args) { //构建一棵树 TreeNode a = new TreeNode(1); TreeNode b = new Tree

2020-09-11 14:00:46 202

原创 数据结构与算法---线性表

MJ大神的数据结构与算法,膜拜中整个3季视频有100+小时,程序 = 数据结构 + 算法这也就是数据结构与算法的重要性。潜心学习好多大神都说,《剑指offer》这本书的65道题要是掌握了,基本上80%的面试题都是这上面的。那么,《剑指offer》是必刷了。开篇小例子斐波那契数列n = 0,1,2,3,4,5,6, 7, 8, 9…fib=0,1,1,2,3,5,8,13,21,34…求第n个斐波那契数列方法一:递归public class Main { public stat

2020-09-08 17:56:37 326

原创 数据结构与算法---线性表---删除排序链表中的重复元素

83. 删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3直观的想法是:一个一个比较,前后相等,则进行链表删除操作,之后继续比较。然鹅,想出了一个投机取巧的方法递归方法思路既然求head的链表,如果head->next的链表已经求出来了那么,再比较head的值,与head-

2020-09-08 17:38:54 630

原创 数据结构与算法---线性表---链表的中间结点

876. 链表的中间结点给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.

2020-09-08 15:29:36 302 1

原创 数据结构与算法---线性表---删除链表中的节点、移除链表元素

237. 删除链表中的节点请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.提示:链表至少包含两个节点。链表中所有节点的值都是唯一的。给定的节点为非末尾节点并且一定是链表

2020-09-06 13:26:01 1800

原创 数据结构与算法---线性表---判断一个链表是否有环

141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。/** * Definition for singly-linked list. * struct ListNode { * int val; * s

2020-09-04 19:37:43 294

原创 数据结构与算法---线性表---反转链表

LeetCode 206反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?学习之前,巩固一下链表知识:数据结构学习(一)链表结构以及链表逆序后的效果:递归方法:使用递归方法,reverseList(head->next)的效果如上图所示。假如我们已经将reverseList

2020-09-04 16:29:37 379

原创 数据结构与算法---线性表---动态添加数组

package com.mj;public class ArrayList { //元素的数量 private int size; //所有元素 private int[] elements; //有个需要注意的地方,size是数组实际占用的大小 //elements.length是数组分配的空间大小 //size <= elements.length //构造函数 public ArrayList() { elements = new int[10];

2020-09-01 11:14:20 310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除