
数据结构
油油灰
这个作者很懒,什么都没留下…
展开
-
前缀树
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。代码实现如下:主要的成员函数有两个:search()判断某个字符串是否存在;insert()插入一个字符串;class n...原创 2020-03-28 14:00:46 · 161 阅读 · 0 评论 -
并查集
最近刷题了解到了并查集这种数据结构,特意去学习了一下,并查集的写法大概有几种,但是关键点只有如下两点:1.合并的方式(按高度或者按节点数);2.路径压缩写了几个模板1.按高度合并同时进行路径压缩class Union{ public: Union(int a):n(a) { cnt=n; for(int i=0;i<n;++...原创 2020-01-15 19:48:23 · 119 阅读 · 0 评论 -
合并K个排序链表(C++实现)
Leetcode第23题,一道hard题。leetcode 231.分治法实现方法其实和普通的归并排序差不多,最大的区别是这里我们每一次合并只需要处理两个链表就行了。class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.size()=...原创 2019-12-03 18:44:40 · 791 阅读 · 0 评论 -
二叉树的遍历与重建
前面文章已讲到了二叉树的几种典型的遍历方式:主要分为两大类1. 深度优先(DFS):前序遍历,中序遍历,后序遍历2. 宽度优先(BFS)这几种遍历的具体实现前面的文章已经实现过了,这篇文章重点分析如何根据已有的前序遍历和中序遍历重建二叉树(或者给定中序遍历和后序遍历)首先看一下三种遍历的差别:简单来讲:前序遍历顺序(中左右)中序遍历(左中右)后序遍历(左右中)下面给出一个具体...原创 2019-10-15 21:18:14 · 175 阅读 · 0 评论 -
二叉树的几种遍历方法(BFS,DFS)
二叉树的遍历应该是一个基本操作,有很多相关的题目,这篇文章就用几种不同的方法来实现遍历整个遍历过程。先定义一下二叉树的节点:struct TreeNode { * int val; * TreeNode *lc; * TreeNode *rc; * TreeNode(int x) : val(x), left(NULL), right(NULL) {}...原创 2019-10-14 12:35:30 · 625 阅读 · 0 评论 -
实现atoi()函数,字符串转整型
*实现atoi()函数其实LeetCode 的一道中等题,具体题目如下:这道题目的基本思路并不难,麻烦的在于各种边界条件的判断,整个转换必须处理好如下几个问题:开始连续的空格后接数字正负号的处理出现其他非数字的字符溢出问题(题目规定只能存储32位数字,因此无法使用long long等) (关键问题) 实现代码如下:class Solution {public: in...原创 2019-10-12 16:03:12 · 279 阅读 · 0 评论 -
链表相关问题分析part2(寻找公共节点,是否有环)
这篇文章主要是分析一下链表是否有环问题(LeetCode141题)主要方法类似于上一篇文章https://blog.youkuaiyun.com/you558/article/details/102409450题目描述如下:思路一:遍历链表,利用一个哈希表保存遍历到的节点地址,同时判断该节点的下一个节点是否在保存的哈希表中,若存在,则说明链表有环;反之,若遍历到某一节点为nullptr,则说明链表无...原创 2019-10-08 23:07:02 · 129 阅读 · 0 评论 -
链表相关问题分析part1(寻找公共节点,是否有环)
这篇文章主要是分析一下最近做过的两道leetcode链表相关的题目,这两道题目有很大的相似,分别为LeetCode160题和LeetCode141题。首先来看一下160题(相交链表):思路一:看到这道题目首先第一想法就是遍历其中一个链表A,用一个哈希表来存储每一个节点,然后在遍历另外一个链表B,判断B中是否存在一个节点的next节点存在于刚存储的哈希表中,若存在,则找到了相交节点,反之则两...原创 2019-10-08 20:56:56 · 175 阅读 · 0 评论 -
字符串反转 leetcode 344
题目如下:这是一道easy题,大概思路有两种:双指针法两个指针指向数组的首部和尾部,交换两个指针指向的字符,然后两个指针逐渐向中间靠拢,当首指针大于尾指针时结束循环。递归定义一个递归函数,每次交换数组首部和尾部的字符,直到递归结束。下面给出具体的实现:双指针法class Solution {public: void reverseString(vector<c...原创 2019-10-07 18:41:07 · 124 阅读 · 0 评论 -
二分查找的一些想法 LeetCode 704题
二分法原创 2019-10-05 12:44:40 · 166 阅读 · 0 评论