数据结构与算法
丿ZhangT
这个作者很懒,什么都没留下…
展开
-
回顾数据结构和算法
数据结构概述数据结构定义:数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合 中数据元素之间的关系组成。数据的存储结构**1.顺序存储:**是把数据元素存放在地址连续的存储单元里,其数据间的逻 辑关系和物理关系是一致的。数组就是顺序存储结构的典型代表。**2.链式存储:**是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这些数据在内存中的地址可以是连续的,也可以是不连续的数据的逻辑结构1.集合结构:集合结构中的数据元素同属于一个集合,他们之间是并列原创 2020-11-18 14:09:33 · 181 阅读 · 0 评论 -
数据结构-数组
数组的介绍数组是在内存中存储相同数据类型的连续的空间,声明一个数组就是在内存空间中划出一串连续的空间。数组名代表的是连续空间的首地址。通过首地址可以依次访问数组所有元素。元素在数组中的排序下标从零开始。数组的特性:数组长度一旦声明,不可改变不可追加。数组可以存储基本数据类型也可以存储引用数据类型(对象)。如图:基本数据类型数组默认初始化都是0int arr [] =new int[5]; for(int i : arr){ System.out.原创 2020-11-18 14:08:27 · 376 阅读 · 0 评论 -
数据结构-栈
数据结构-栈栈的定义:栈是一种“先进后出”的一种数据结构,有压栈出栈两种操作方式。栈的图形结构:浅谈Java中的栈:Java中的栈分为本地方法栈和虚拟机栈,后边会写一篇jvm内存结构会详细介绍,这篇先聊一聊Java中栈是怎么实现的。Stack s = new Stack();s.push("a");s.push("b");s.push("c");s.push("d");System.out.println(s); //[a, b, c, d]从上述代码中可以看出Stac原创 2020-11-18 14:07:40 · 169 阅读 · 0 评论 -
数据结构-队列
队列的定义队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。例如:你们在用电脑时有没有经历,机器有时会处于疑似死机的状态,鼠标点什么似乎都没用,双击任何快捷方式都不动弹。就当你失去耐心,打算reboot时。突然他像酒醒了一样,把你刚才点击的所有操作全部按顺序执行一遍。这其实是因为操作系统中的多个程序因需要通过一个通道输出,而按先后次序排队等待造成的操作系统是应用了一种数据结构来实现刚才提到的先进先出的排队功能,这就是队列。用数组实现队列这种数据结构:public cl原创 2020-11-18 14:06:54 · 154 阅读 · 0 评论 -
数据结构-单链表
单向链表的介绍数据在内存中以链式存储的线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域,如图所示:手动实现链表这种数据结构:public class Node<T> { private T value; private Node next; public Node(T value) {原创 2020-11-18 14:06:10 · 178 阅读 · 0 评论 -
数据结构-单向循环链表
单向循环链表介绍它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环,如图所示:从图中可以看出它和单链表唯一区别就是没有最后一个结点了。假设只有一个结点他的下一个结点就是其本身,因此构建一个循环单链表也非常简单,只需要把单链表的下一个结点换成当前结点。public class Node<T> { private T value; private Node next = this; public Node(T value) { this原创 2020-11-18 14:05:17 · 520 阅读 · 0 评论 -
数据结构-双向循环链表
双向循环链表介绍双向循环链表和单向循环链表最大的区别就是可以通过当前结点找到下一个结点和上一个结点,比如说对链表进行删除操作,单向链表通过当前节点是找不到上一个节点的,因此不能删除传入的节点,只能删除传入的节点的下一个结点。单向链表如果真想删除传入的节点,可以让下一个结点的值等于传入的结点,让传入结点的下一个结点等于下下一个结点。代码实现//单向链表删除传入结点public void remove(Node node){ //拿到传入结点的下一个结点的值 int value = node.next原创 2020-10-10 20:04:53 · 180 阅读 · 0 评论 -
递归算法
递归的三大要素:第一要素:明确你这个函数想要干什么,对于递归,我觉得很重要的一个事就是,这个函数的功能是什么,他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不管函数里面的代码什么,而是要先明白,你这个函数是要用来干什么。例如,我定义了一个函数,假设是算n的阶层的函数public void method(int n){}第二要素: 寻找递归结束条件,所谓递归,就是会在函数内部代码中,调用这个函数本身,所以,我们必须要找出递归的结束条件,不然的话,会一直调用自己,进入无底洞原创 2020-10-10 20:04:07 · 294 阅读 · 1 评论 -
高度检查器
题目学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。请你返回至少有多少个学生没有站在正确位置数量。该人数指的是:能让所有学生以 非递减 高度排列的必要移动人数。示例示例:输入:[1,1,4,2,1,3]输出:3解释:高度为 4、3 和最后一个 1 的学生,没有站在正确的位置。提示:1 <= heights.length <= 1001 <= heights[i] <= 100分析:想法比较简单,首先创建一个新数组,把目标数组全部复制到新数组,原创 2020-10-09 19:43:27 · 128 阅读 · 0 评论 -
二叉树的最大深度
题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。分析二叉树的深度,其实就是二叉树的高度,怎么计算二叉树的高度呢?遍历左孩子,遍历右孩子比较那个高取哪个。代码如下:/** * Definition for a binary tree node. * public class TreeNod原创 2020-10-09 19:42:46 · 88 阅读 · 0 评论 -
有序数组的平方
题目给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]分析这道题非常简单,遍历数组中每项元素,平方之后再放回原数组,最后再排序。感觉自己想的太简单,用到了java中的排序方法,很low,但是看到这题就只能想到这种解决办法。代码如下: public int[] sortedSqua原创 2020-10-09 19:36:52 · 114 阅读 · 0 评论 -
独一无二的出现次数
题目给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]输出:true 分析这道题实际原创 2020-10-09 19:36:19 · 123 阅读 · 0 评论 -
Nim游戏
题目你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例示例:输入: 4输出: false 解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛; 因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。分析这题读了好几遍才看懂,很原创 2020-10-05 17:43:31 · 236 阅读 · 0 评论 -
将有序数组转换成二叉排序树
题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例分析这道题我想了好久,知道平衡二叉树进行中序遍历就会变成一个递增数组。反过来给你你个递增数组让你构建一个平衡二叉树就懵逼了,结果画了好久的图,看了别人的题解才做出来。画图如下:代码如下:public TreeNode sortedArrayToBST(int[] nums) { if(nums.length <原创 2020-10-05 17:42:58 · 604 阅读 · 0 评论 -
数据结与算法
数据结构概述:数据结构定义数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合 中数据元素之间的关系组成。数据的存储结构1.顺序存储:是把数据元素存放在地址连续的存储单元里,其数据间的逻 辑关系和物理关系是一致的。数组就是顺序存储结构的典型代表。2.链式存储:是把数据元素存放在内存中的任意存储单元里,也就是可以把数据存放在内存的各个位置。这...原创 2019-11-25 16:17:52 · 138 阅读 · 0 评论