
数据结构
逗号8080
足够专注,精益求精
展开
-
力扣刷题笔记654
题号654.最大二叉树简介:给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树 。示例 1:输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示:[3,2,1,原创 2021-11-20 17:28:34 · 101 阅读 · 0 评论 -
二叉树的层次遍历
思想二叉树的层次遍历的主要想法就是一层一层得遍历,以下面这棵二叉树为例从第一层开始遍历得出的结果就是58->36->60->18->45->59层序遍历的思想是很简单的,下边来说具体的代码实现,我们可以借助队列(根据队列先进先出的特点)来实现二叉树的层序遍历首先让根节点入队然后根节点出队,根节点的左右孩子节点入队重复上述操作,一个节点出队后,就把他的左右孩子节点入队,重复如此操作我们会发现得出的结果就是我们想要的层次遍历的结果。具体的流程:代码实原创 2021-11-01 17:02:28 · 211 阅读 · 1 评论 -
二叉树的深度遍历(迭代法)
中序遍历我们可以借助一个栈来辅助实现首先一直向左走走到底if(cur != null){ stack.push(cur) cur = cur.left;}此时栈中因为是中序遍历,此时结点的值为null,所以去当前结点的父节点的值,即当前二叉树的最左结点的值。 cur = stack.pop(); res = cur.val; //去试探右孩子结点 cur = cur.right;此时是这种情况当前节点的值已经记录到了res数组中,我们需要去找他的右原创 2021-10-30 16:07:24 · 247 阅读 · 0 评论 -
二叉树基本理论
二叉树是我们经常会用到的一种数据结构,在我们日常刷题和编程中都有很大的用处,本篇讲一下我所了解的二叉树的相关知识。满二叉树满二叉树:一个二叉树只有度为0和度为2的结点,且度为0的结点都在同一条线上,这种二叉树就叫做满二叉树。图例:...原创 2021-10-28 15:34:09 · 340 阅读 · 0 评论 -
力扣刷题笔记347
347.前 K 个高频元素简介:给你一个整数数组 nums和一个整数k,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]题解:这道题的第一步是记录每个数字的出现次数,这一步十分简单我们可以采用一个Map来存储数字和他的出现次数然后就是比较出现次数的大小,确立前K个高频元素,这一步也是最重要的一步。我们原创 2021-10-22 21:53:22 · 264 阅读 · 0 评论 -
力扣刷题笔记1047
题号:1047. 删除字符串中的所有相邻重复项简介:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,原创 2021-10-19 22:33:19 · 109 阅读 · 0 评论 -
力扣刷题笔记20( 字符串匹配常用辅助栈解法)
题号:20.有效的括号简介:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:tr原创 2021-10-18 20:28:01 · 122 阅读 · 0 评论 -
树的深度优先遍历
先序遍历 (根->左->右)5 4 1 3 2 7 8中序遍历(左->根->右)1 2 3 4 5 7 8后序遍历(左->右->根)2 3 1 4 8 7 5代码实现//先序遍历public void beforeOder(TreeNode treeNode){ if (treeNode !=null){ System.out.println(" "+treeNode.getData()+""); beforeOd.原创 2021-09-19 09:39:08 · 202 阅读 · 0 评论 -
数据结构--栈
栈特点 :先进后出栈就像是堆箱子,第一个放入的箱子需要最后才能取到实现:链表实现链表节点的实现--------------------------------------------------------------------------------public class ListNode { //当前节点的值 int value; //下一个节点的地址域 ListNode next; public ListNode(int value) { thi原创 2021-09-17 19:43:46 · 74 阅读 · 0 评论 -
数据结构--队列
队列特点 : 先进先出队列就像我们日常排队一样,先进去的人先出来。实现:数组实现思路分析1.如果尾指针rear小于数组队列的最大下标(arr.length-1), 则将数据存入rear所指的数组元素当中,否则无法存入数据。 rear == arr.length-1 (队列已满)2.将尾指针往后移动:rear +1 ,当front == rear (空)实现public class ArrayQueueDemo { private Object[] arr; //原创 2021-09-17 19:36:39 · 85 阅读 · 0 评论 -
力扣刷题笔记704
题号 :704. 二分查找简介 :给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回原创 2021-09-06 20:21:17 · 110 阅读 · 0 评论 -
力扣刷题笔记844
题号:844. 比较含退格的字符串简介:给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = "a##c", T = "#a#c原创 2021-08-31 20:22:30 · 126 阅读 · 0 评论 -
链表经典算法 (一.链表翻转)
第一步.第二步.同时我们需要让头指针向后走,但由于内存中的节点如果没有指向就会被清除所以需要一个节点来指向当前的头结点原创 2021-08-23 16:57:34 · 91 阅读 · 0 评论 -
链表的两种创建方式 头插与尾插
链表节点的实现public class ListNode { //当前节点的值 int value; //下一个节点的地址域 ListNode next; public ListNode(int value) { this.value = value; }}头插法public void headInesert(int value){ ListNode node=new ListNode(value); if (head==null){原创 2021-08-23 11:41:29 · 174 阅读 · 0 评论 -
链式存储 -链表
链表的特点:会有个存储自己数据的地方还会有一个指向下一个节点的地方分为单链表和双向链表单链表:双向链表:head是线性链表当中的第一个节点,但是这个节点在数据域当中并没有存储数据,这里之所以写这个的目的是我们能够通过头指针去遍历我们整个链表。链表是有能力存储在不连续空间的,当然可以存储在连续空间 ->但是仍然要是用地址的形式访问下一个节点遍历 (1+n)/2 时间复杂度O(n)对一个有序的数组的查找某一个元素数组使用二分查找->O(log2 n原创 2021-08-23 10:57:44 · 141 阅读 · 0 评论