数据结构
Wiki~
这个作者很懒,什么都没留下…
展开
-
155. 最小栈(栈、链表)
155. 最小栈题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null原创 2020-07-03 17:55:42 · 830 阅读 · 0 评论 -
234. 回文链表(图解)
234. 回文链表题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路一、通过快慢指原创 2020-07-03 11:11:15 · 1146 阅读 · 0 评论 -
160. 相交链表(图解)
160. 相交链表(图解)题目写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,原创 2020-07-02 20:40:30 · 974 阅读 · 0 评论 -
2. 两数相加
2. 两数相加(详细)题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:原创 2020-07-02 18:17:03 · 691 阅读 · 0 评论 -
面试题 16.16. 部分排序
面试题 16.16. 部分排序题目给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。示例:输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]输出: [3,9]提示:0 <= len(array) <= 1000000来源:力扣(LeetCode)链接原创 2020-07-01 22:34:35 · 793 阅读 · 0 评论 -
75. 颜色分类(图解)
75. 颜色分类(图解)题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能原创 2020-07-01 17:06:52 · 2560 阅读 · 0 评论 -
哈希表
哈希表引入含义设计大整数:浮点型字符串复合类型Java中的hashCode引入字符串中的第一个唯一字符,这一道题是leetcode上的一道题,要想知道字符串中的第一个唯一字符,就得知道字符串中所有字符出现的次数,这时,我们就想到将字符串的每一个第一次字符存放到数组中,如果第二次出现这个字符,那么让freq[s.charAt(i) - 'a'] ++,第二次for循环,判断第一个字符出现1,如果...原创 2019-12-06 21:15:18 · 750 阅读 · 0 评论 -
数据结构——二分搜索树
二分搜索树二分搜索树的本质是树,对于树的基本知识,我在我的一片关于堆的博文的开头做了讲述,大家可以参考。这里将重点讲述树的递归结构。定义二分搜索树是一颗二叉树, 二分搜索树每个节点的左子树的值都小于该节点的值,每个节点右子树的值都大于该节点的值,其任意一个节点的每棵子树都满足二分搜索树的定义。NULL节点和只有一个节点的树也是二叉树。理解通过上面对二叉树的定义,我们知道了向树中存储的元素...原创 2019-11-15 20:47:36 · 771 阅读 · 0 评论 -
数据结构——堆(C++)
数据结构——堆文章目录数据结构——堆堆与堆排序二叉树满二叉树完全二叉树二叉堆堆的存储堆的插入删除具体的实现堆排序堆与堆排序堆(heap)分为二叉堆、二项式堆、斐波那契堆,堆是非线性数据结构,相当于一维数组,有两个直接后继。堆又被称为优先队列,尽管名为优先队列,但堆并不是队列。因为队列遵循First in, First out,但是堆是按照元素的优先级取出元素。所以“堆”是实现调度器的理想数据...原创 2019-11-13 17:44:21 · 9280 阅读 · 2 评论 -
数据结构——链表(图文)
链表文章目录链表数据结构插入元素为链表设立虚拟的头节点链表的查找链表的修改遍历输出删除操作测试结果源码之前我们学习了基于数组实现的三种数据结构:动态数组、栈、队列。他们底层依赖于静态数组,通过resize方法使其变成动态的。但是我们所谓的动态时是从用户的出发角度来看的。接下来我们学习链表。他是真正的动态数据结构,也是最简单的动态数据结构(因为还有二分搜索树、Trie等相对复杂的)。学习链表,...原创 2019-11-06 13:02:42 · 3254 阅读 · 0 评论 -
数据结构——循环队列(图文)
文章目录循环队列引入逻辑代码源码循环队列引入为什么要使用循环队列?因为普通队列的底层是数组,对于队列的先进先出,每当我们要删除队列首一个元素的时候,之后的元素都要向前推移,然后size--,这样的话就增加算法的时间复杂度(变成了O(n))。这时我们就想到,队首元素弹出去了,即使不移动后续元素,他仍会保持队列的样子,我们只需要用一个变量来存储队首索引front,再用一个变量来存储队尾的后一个索...原创 2019-11-05 14:54:40 · 8243 阅读 · 3 评论 -
数据结构——动态数组
数据结构——动态数组文章目录动态数组Code(扩容)测试Code(缩容)测试在上一节我们讲述了静态数组的实现过程,下面我们来学习一下动态数组。动态数组动态数组,顾名思义使得数组的容量是可伸缩的,大致思路如下,我们就需要创建一个新的数组newData[]来保存原来data[size]数组中的值,但是capacity将变大,size不变,赋值过程采用循环来赋值,完成后,将data[]指向new...原创 2019-11-04 11:34:49 · 871 阅读 · 0 评论 -
数据结构——数组
文章目录数据结构——数组制作属于我们的数组类插入指定位置插入元素验证判断查找修改搜索删除总结数据结构——数组数组的命名,就是给数组起一个名字,数组的索引:索引可以有语意,也可以没有语意。数组是承载元素的工具,与“索引——语意”之间的关系并不大。但是在生活中,大部分来处理“索引没有语意”的情况的数组使用。比如,在一个数组长度为8的数组中,int[] score = new int[10];在...原创 2019-11-04 08:59:14 · 837 阅读 · 0 评论