![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Wzning0421
I'm always learning.
展开
-
链表归并排序与翻转
我在链表排序和翻转上面总是踩坑,在此记录一下。链表归并排序:#include <iostream>#include <algorithm>#include <vector>#include <unordered_map>#include <unordered_set>#include <string>#include <map>using namespace std;struct ListNode原创 2020-08-25 00:13:18 · 485 阅读 · 0 评论 -
C++ 自己实现一个unordered_map(hashmap)
今天面试的时候遇到面试官出了一个问题,要实现一个unordered_map. 我实现的不太好,所以面试之后重新自己整理实现了一个unordered_map,在此记录一下。首先unordered_map的底层实现是哈希表。那么对于任何一个关键key的哈希,首先需要考虑的是哈希冲突的问题,在这里应该用链表的方式解决。如果不同的key哈希成了同一个地址,那么在链表的基础上向后连接就行。然后主要实现的...原创 2020-04-25 13:55:29 · 2249 阅读 · 1 评论 -
求0到数字n中的所有数字中某一个数字k出现的总次数
今天在leetcode上面遇到了一道题:编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。这道题最好的解法是动态规划。分析如下:设dp[i]标志这个数字前i位中出现了2的次数,那么我们需要求的是dp[i]和的dp[i - 1]的关系。比如说一个数字2849,那么dp[2]就表示0~49中出现2的数量,dp[3]就表示0~849中出现2的数量,dp[4]就表示0~28...原创 2020-03-17 18:29:36 · 804 阅读 · 0 评论 -
求连续区间和为目标值的一种解题思路
今天在leetcode上面遇到了一道题,我觉得解题思路很好,在此记录下来:题目是:给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同。返回该子数组,若存在多个最长子数组,返回左端点最小的。若不存在这样的数组,返回一个空数组。如:输入: ["A","1","B","C","D","2","3","4","E","5","F","G","6","7","...原创 2020-03-17 15:47:29 · 1178 阅读 · 0 评论 -
c++ 数据结构之 线段树
线段树是一种数据结构,是一种二叉树。线段树将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。线段树对于区间求和等区间操作能够实现复杂度为O(logn)的操作,故得以广泛利用。修改一个值的操作也是O(logn)。 线段树是建立在线段基础上,每个结点都代表了一条线段[a,b]。长度为1的线段称为元线段。非元线段都有两个子结点,左结点代表的线段为[a,...原创 2020-02-17 20:12:59 · 1694 阅读 · 0 评论 -
C++简单实现 前缀树
今天在leetcode上面看了一道题(第208题),问题是如何实现一个字符串前缀树,能够实现字符串的插入,查找和查找前缀功能。在这里记录一下前缀树的实现:class Trie {public: /** Initialize your data structure here. */ Trie() { isEnd = false; for (int i = 0; i < 26...原创 2020-02-01 19:54:44 · 510 阅读 · 0 评论 -
排序算法之 堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。什么是完全二叉树呢?可以看下这篇文章:https://blog.csdn.net/hanzhen7541/article/details/99437854所以说,堆排序是将数组当做完全二叉树、根据完全二叉树的特性来...原创 2019-08-16 17:16:54 · 219 阅读 · 0 评论 -
C++ 最大堆最小堆与push_heap pop_heap
make_heap:根据不同参数生成大顶堆或者小顶堆,默认大顶堆。make_heap(_RAIter,_RAIter) 默认生成大顶堆make_heap(_RAIter,_RAIter,_Compare) _Compare有两种参数,一种是greater(生成小顶堆),一种是less(生成大顶堆)push_heap()是向堆中插入一个元素,并且使堆的规则依然成立push_heap(_R...原创 2019-08-25 15:04:51 · 4073 阅读 · 5 评论 -
牛客网 二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。返回值应该是一个指向值最小节点的指针。思路:很明显,当中序遍历一个二叉搜索树的时候,结果就是由小到大遍历的。那么我们需要找一种方法能够持续连接中序遍历的时候的某个节点和它的下一个节点,从而形成双向链表。代码如下:/*struct TreeNode ...原创 2019-08-24 14:17:18 · 190 阅读 · 0 评论 -
完全二叉树,完美二叉树和完满二叉树
二叉树(Binary Tree)什么是二叉树(Binary Tree)每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的性质(1)若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)。(2)高度为k的二叉树最多有2^(k+1) - 1个结点(k>=-1)。 (空树的高度为-1)...原创 2019-08-13 15:10:43 · 2446 阅读 · 0 评论 -
前缀(波兰表达式) 中缀 后缀(逆波兰表达式)
前缀、中缀、后缀表达式(逆波兰表达式)本文转自https://www.cnblogs.com/chensongxian/p/7059802.html介绍前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求职中缀表达式简介中缀表达式就是常见的运算表达式,如(3+4)×5-6前缀表达式简介前缀表达式又称波兰式...转载 2019-07-23 16:54:33 · 210 阅读 · 0 评论 -
二叉树的前序中序后序 递归与非递归解法
转自https://www.cnblogs.com/songwenjie/p/8955856.html二叉树遍历原理二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。为什么研究二叉树的遍历?因为计算机只会处理线性序列,而我们研究遍历,就是把树中的结点变成某种意义的线性序列,这给程序的实现带来了好处。二叉树的创建遍历...原创 2019-07-04 17:38:49 · 525 阅读 · 0 评论