
数据结构
Guapifang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 410. 分割数组的最大值--二分答案
分割数组的最大值给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [10,8],因为此时这两个子数组各自的和的最大值为18,在所有情况中.原创 2020-12-02 13:06:21 · 210 阅读 · 0 评论 -
LeetCode 315. 计算右侧小于当前元素的个数--归并排序累计数目
计算右侧小于当前元素的个数给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入:nums = [5,2,6,1]输出:[2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素提示:0 <= nums.length &l.原创 2020-12-01 19:29:12 · 183 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第N个节点---循环遍历找长度
删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。题解:直接模拟,先跑一遍找出长度,然后再跑一遍删除,注意如果删除的是头节点,直接返回head->next;AC代码/** * Definition for singly-linked list.原创 2020-10-19 10:40:58 · 115 阅读 · 0 评论 -
LeetCode 834. 树中距离之和--递推计算
题解:很有趣的题目,好久没接触树了,一开始还懵了一下。数据计算不难,以样例进行说明,这个我们很容易计算得到某个节点到其他所有节点的距离和,这个没问题,但是暴力计算所有节点到其他所有节点距离和,时间复杂度就是10000x10000,就严重超时。按样例,我们统一认为0节点为根节点。这里进行一次计算知道ans[0]=8,那么我们寻找其他节点的推导方法,因为距离和的推导和子节点数目有关,比如我知道2和其子节点3、4、5的距离和为3,1和子节点的距离和为0,所以我们用val[x]表示节点x到其所有子节点的距离和.原创 2020-10-06 10:26:21 · 242 阅读 · 0 评论 -
LeetCode 113. 路径总和 II--二叉树
AC代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int>q; v.原创 2020-09-26 16:14:33 · 103 阅读 · 0 评论 -
LeetCode 617. 合并二叉树--递归合并
题解:进行深度遍历,同时从两棵树的根节点出发,于是有4种情况:1.当前节点都不为空,把第2棵树的当前节点内容加到第一棵树上2.树1节点为空,树2节点不为空,返回树2当前节点作为新的子树内容3.树1节点不为空,树2节点为空,返回树1当前节点作为新的子树内容4.树1树2当前节点都为空,返回NULL。然后不断进行左子树和右子树内容更新。AC代码/** * Definition for a binary tree node. * struct TreeNode { * int val;.原创 2020-09-23 09:38:40 · 275 阅读 · 0 评论 -
LeetCode 1104. 二叉树寻路
二叉树寻路在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。示例 1:输入:label = 14输出:[1,3,4,14]示例 2:输入:label = 26输出.原创 2020-09-22 15:48:51 · 317 阅读 · 0 评论 -
LeetCode 1519. 子树中标签相同的节点数--递归累计和
子树中标签相同的节点数给你一棵树(即,一个连通的无环无向图),这棵树由编号从 0 到 n - 1 的 n 个节点组成,且恰好有 n - 1 条 edges 。树的根节点为节点 0 ,树上的每一个节点都有一个标签,也就是字符串 labels 中的一个小写字符(编号为 i 的 节点的标签就是 labels[i] )边数组 edges 以 edges[i] = [ai, bi] 的形式给出,该格式表示节点 ai 和 bi 之间存在一条边。返回一个大小为 n 的数组,其中 ans[i] 表示第 i 个节.原创 2020-09-21 19:35:30 · 313 阅读 · 0 评论 -
LeetCode 220. 存在重复元素 III--Set简单处理
在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。如果存在则返回 true,不存在返回 false。示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例 3:输入: nums = [1,5,9,1,5,9], k = 2,原创 2020-09-19 15:17:09 · 194 阅读 · 0 评论 -
PAT甲级 1119 Pre- and Post-order Traversals (30分)二叉树的前序和后序遍历
1119 Pre- and Post-order Traversals (30分)Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences, or preorder and inorder traversal sequ原创 2020-08-29 14:12:07 · 330 阅读 · 0 评论 -
PAT甲级 1055 The World‘s Richest (25分)--线段树优化查询
**1055 The World’s Richest (25分)**Forbes magazine publishes every year its list of billionaires based on the annual ranking of the world’s wealthiest people. Now you are supposed to simulate this job, but concentrate only on the people in a certain rang原创 2020-08-15 01:13:07 · 164 阅读 · 0 评论 -
PAT甲级 1043 Is It a Binary Search Tree (25分) 二叉查询树的遍历
1043 Is It a Binary Search Tree (25分)A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node’s key.The right subtree of a node cont原创 2020-08-13 12:10:19 · 218 阅读 · 0 评论 -
数据结构 二叉树的遍历(前序遍历,中序遍历和后序遍历)实现
给一定不带权值只有节点的二叉树,如下图首先说明二叉树各种遍历方法的顺序:1.前序遍历:根->左->右2.中序遍历:左->根->右3.后序遍历:左->右->根于是上图中3种方法遍历结果1.前序遍历:1 2 4 5 3 6 7 8 92.中序遍历:4 2 5 1 6 3 8 9 73.后序遍历:4 5 2 6 9 8 7 3 1现在用C++进行3种遍历的实现输入格式为输入一个根节点,输入对应的左右子节点,如果左/右子节点没有,输入-1表示。如上图输入数据原创 2020-08-13 10:33:28 · 1947 阅读 · 0 评论 -
PAT甲级 1020 Tree Traversals (25分)--数据结构递归处理
**1020 Tree Traversals (25分)**Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.原创 2020-08-07 19:25:50 · 148 阅读 · 0 评论 -
数据结构 二、栈(Stack)和队列(Queue)
在数据结构中,栈和队列,严格意义上来说,也属于线性表,因为它们也都用于存储逻辑关系为 “一对一” 的数据。使用栈结构存储数据,讲究“先进后出”,即最先进栈的数据,最后出栈;使用队列存储数据,讲究 “先进先出”,即最先进队列的数据,也最先出队列。其实栈和队列的原理和实现都很容易,但因为其在我们日常的使用中给我们带来了很大的帮助,不论是算法竞赛还是项目应用,栈和队列都是必不可少的存在,其中我们常见的栈的应用如:括号匹配,表达式的计算。而队列则常用于广度搜索。在C++中,栈和队列都有封装好的模块,可以直接调原创 2020-05-12 18:07:29 · 416 阅读 · 0 评论 -
中缀表达式转后缀表达式分析+实现代码(C++)
中缀表达式,也就是我们常见常用的表达式一般形式:比如 6+7*(2+3)+10/5而后缀表达式,则是在中缀表达式基础上,进行一定规则的转换:1、按运算符优先级对所有运算符和它的运算数加括号,(原本的括号不用加)2、把运算符移到对应的括号后3、去掉括号比如将6+7*(2+3)+10/5转换成后缀表达式:1. 6+(7*(2+3))+(10/5)2. (6+(7*(2+3)))+(10/5)3. (6+(7*(2 3)+))+(10 5)/4. (6+(7 (2 3)+)*) (10 5)原创 2020-05-12 14:31:48 · 2040 阅读 · 0 评论 -
数据结构 一、链表
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。而链表的操作则是数据结构的一大核心部分,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按原创 2020-05-11 17:58:18 · 288 阅读 · 0 评论