
数据结构
木阿南二三记
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
反转一个单链表(迭代方法、递归方法+分析+代码)
206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?一、迭代方法:分析:第一步:创建ListNode型的变量cur,记录每次要交换的位置,初始cur = hea...原创 2019-04-02 21:20:27 · 817 阅读 · 0 评论 -
二叉树相关问题整理二(二叉树前序、中序、遍历的递归/非递归解法,层序遍历,从前/后序与中序遍历序列构造二叉树,二叉搜索树与双向链表 )
二叉树结构:class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; }}二叉树相关问题整理一:https://blog.csdn.net/qq_43109561/article/detai...原创 2019-08-01 15:57:26 · 450 阅读 · 0 评论 -
从100万个数里面找出10个最大的数。写出代码并分析复杂度。
题目:从100万个数里面找出10个最大的数。写出代码并分析复杂度。分析:拿出这组数据的前10个数构建一个小根堆(堆排序:升序排序10个数,先建一个大根堆,再将堆顶的最大值与最后一个值交换,这样不断循环直到排好序成为一个小根堆),这个堆将保存数据中最大的10个数,接下来遍历剩下的数据,遇到比堆顶元素小的元素直接跳过,遇到比堆顶元素大的,替换堆顶元素,再对堆进行维护(也就是排序的过程),当遍...原创 2019-07-25 16:18:28 · 4125 阅读 · 0 评论 -
常见排序算法(算法思想+算法图解+特性总结+代码实现):直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序
一、插入排序1.直接插入排序1.1 算法思想:每次从待排序的数列中按顺序拿出一个数,在已经排好序的有序序列中比对其大小,插入到对应位置,形成一个新的有序序列,全部插入完毕后形成的有序序列就是排好序的序列。1.2 算法图示:1.3 特性总结:1. 元素集合越有序,时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:稳定...原创 2019-05-15 15:03:40 · 1159 阅读 · 0 评论 -
中缀表达式转后缀表达式+后缀表达式的计算+中缀表达式的合法性校验
下面所述方法支持整数的+、-、*、/、()操作运行结果:描述:中缀表达式:通用的算术或逻辑公式表示方法,操作符是以中缀的形式处于操作数的中间,平时常用的算术表示方法。后缀表达式: 后缀表达式是将操作符置于操作数的后面,如:3 4 +;后缀表达式的表达方式不唯一,如中缀表达式(a+b+c*d)/e,ab+cd*+e/与abcd*++e/都是其后缀表达式。1.中缀...原创 2019-04-24 16:20:55 · 2148 阅读 · 4 评论 -
用队列实现栈、用栈实现队列、设计循环队列、最小栈(设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈)
225.用队列实现栈使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back,peek/pop from front,size, 和is empty这些操作是合法的。 你所使用的语言也许不支持...原创 2019-04-21 17:45:04 · 1407 阅读 · 0 评论 -
链表的相关问题及方法整理(在O(1)时间下删除节点、单链表的反转(循环法+递归法)、求倒数第K个节点(只扫描一遍)、求链表的中间节点(只扫描一遍)、判断两个链表是否相交、找到两个链表相交的第一个节点)
1.在O(1)时间下删除节点题目:给定链表的头指针和一个节点指针,在O(1)时间删除该节点。分析:用要删除节点的下一个节点的数据覆盖要删除节点的数据,然后删除下一个节点。此方法不能用来删除尾节点。代码:class Solution{ public static void deleteNode(ListNode head, ListNode deleteNode){ ...原创 2019-04-09 17:11:56 · 278 阅读 · 0 评论 -
环形链表(给定一个链表,判断链表中是否有环。)、环形链表 II(给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。)
141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1...原创 2019-04-07 17:40:02 · 717 阅读 · 0 评论 -
分隔链表(分析+代码)(给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。)
86. 分隔链表给定一个链表和一个特定值x,对链表进行分隔,使得所有小于x的节点都在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5分析:以下以1->3-&g...原创 2019-04-03 15:16:12 · 1082 阅读 · 0 评论 -
二叉树相关问题整理一(二叉树的最大、最小深度、节点个数、叶子节点个数、第K层节点个数、平衡二叉树、完全二叉树、相同二叉树、镜像二叉树、二叉树的最近公共祖先)
二叉树结构:class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; }}二叉树相关问题整理二:https://blog.csdn.net/qq_43109561/article/detai...原创 2019-08-01 11:16:56 · 900 阅读 · 0 评论