
数据结构与算法
Cheney辰星
这个作者很懒,什么都没留下…
展开
-
LeetCode之二分查找
852. 山脉数组的峰顶索引思路:一开始理解错误了…仔细看了下题目发现很简单嘛。可以直接扫描,也可以用效率更高的二分查找.扫描:class Solution {public: int peakIndexInMountainArray(vector<int>& A) { int res = 1; while (A[res - ...原创 2020-04-07 23:22:05 · 192 阅读 · 0 评论 -
LeetCode刷题之分而治之
面试题25. 合并两个排序的链表思路:最令我困惑的是,几乎所有人都采取了减而治之的策略,最优解也是如此,但这题却分类在分而治之…本题采用减而治之的策略,逐步蚕食问题的规模,最终可以得到问题的答案。不想解释了,简单题(对现在的我来说)。迭代:class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNo...原创 2020-04-04 18:56:34 · 184 阅读 · 0 评论 -
LeetCode刷题之树
94. 二叉树的中序遍历思路:想到了常规递归算法,但是官方解使用提供了三种解法。第一中是最容易理解的,递归;第二中,栈和迭代完成遍历并返回数据;第三中,用了一种特殊的树来完成,这个方法我觉得就没必要学了。递归解法:typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* ...原创 2020-04-01 19:51:12 · 236 阅读 · 0 评论 -
数据结构之树(tree)的实现及其基本操作
树的定义树状图是一种数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。typedef struct BTree //二叉树{ int val; struct BTree* rigth; struct BTree* left;}BTree, *BTreePtr;树的创建与销毁...原创 2020-03-30 17:19:59 · 1750 阅读 · 0 评论 -
LeetCode刷题之字符串
面试题58 - II. 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2:输入: s = “lrloseumgh”, k = 6...原创 2020-03-25 19:11:02 · 415 阅读 · 0 评论 -
KMP模式匹配算法
**注意:**本文金仅供笔者复习使用,不负责讲解。盯着KMP算法看了四个小时左右,终于彻底明白何为KMP算法了。所谓KMP算法有个大名鼎鼎的特点,那便是通过消除主串下标的回溯,极大的避免了不必要的重复比较,从而大大提高算法的时间效率。朴素匹配模式算法说到KMP,我们不得不说提朴实模式匹配算法,只要这种对比才能显现KMP算法的优越性。朴素匹配模式算法,就是所谓暴力枚举,对所以的可能性都进行...原创 2020-03-25 15:56:21 · 418 阅读 · 0 评论 -
LeetCode刷题之栈
面试题 03.04. 化栈为队实现一个MyQueue类,该类用两个栈来实现一个队列。..示例:.MyQueue queue = new MyQueue();.queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); //返回 1 queue.empty(); // 返回 false.说明:.你...原创 2020-03-17 18:53:58 · 211 阅读 · 0 评论 -
LeetCode刷题之队列
641. 设计循环双端队列设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。 insertFront():将一个元素添加到双端队列头部。如果操作成功返回 true。 insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 ...原创 2020-03-16 19:07:30 · 344 阅读 · 0 评论 -
双端队列思想解析
我们先来看看定义是什么。deque (全名double-ended queue)即双端队列,是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。能够看得懂吗?反正我是不能,但这确实是用很精炼的语言描述了双端队列的性质。这句话的内容蕴含这样的信息deque在具备队列的性质同时,deque的rear和front指针还具备栈的性质。这确实不太好...原创 2020-03-15 20:40:17 · 999 阅读 · 0 评论 -
数据结构之栈的实现
百度百科:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的抽象数据类型来源《大话数据结构》ADT Stack(...原创 2020-03-14 19:28:46 · 305 阅读 · 0 评论 -
数据结构之队列实现
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。基于数组的循环队列——C语言描述基于数组的队列,一般我们只会使用循环队列,而不使用非循环。这样做的目的主要是处于安全考虑,已经空间的开销。循环队列的使用使得安全性大幅提高,并降低了...原创 2020-03-14 14:08:07 · 183 阅读 · 0 评论 -
LeetCode刷题之链表
现在正在学习数据结构与算法,学的过程中,学完一部分内容后,感觉有点空洞,没有切身的感受这些数据结构和算法的用处,于是谋生了学完一个专题就随便跑到LeetCode刷对应学完的专题,以此来巩固和加深对所学知识的理解,构造合理的输入和输出。下面是一个萌新对做了一些链表相关的算法题目后,结合自身以及LeetCode上一些大佬的解总结一些东西,此过程会不断更新,错误之处望指出。...原创 2020-03-10 22:27:29 · 546 阅读 · 0 评论