数据结构
sifanchao
这个作者很懒,什么都没留下…
展开
-
Z 字形变换
class Solution {public: string convert(string s, int numRows) { vector<string> temp(numRows); string res; if(s.empty() || numRows < 1) return res; if(numRows == 1) return s; for(int i = 0; i < s.siz.原创 2020-05-28 01:08:34 · 226 阅读 · 0 评论 -
排序
排序算法稳定性如果在元素序列中有两个元素R[i]和R[j],它们的排序码K[i] == k[j],且在排序之前,元素R[i]在R[j]的前面。如果在排序之后,元素R[i]仍在R[j] 之前,则称这个排序算法是稳定的,否则称这个排序算法是不稳定的。内部排序:数据元素全部放在内存中的排序。 外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序...原创 2018-08-21 15:26:13 · 204 阅读 · 0 评论 -
海量数据问题
哈希切割top K问题给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址? 与上题条件相同,如何找到top K的IP? (1)文件太大,100G,肯定不可能一次加载到内存进行处理,这里就必须将文件进行切割了,可是依据哪种方法进行切割呢?假设只是从前到后等份切割的话,将文件切割n份(切割的份数依据所给的内存大小),第一份中假设IP地址为...原创 2018-08-21 07:51:27 · 583 阅读 · 0 评论 -
每日一题(11)
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度解析: 1 / \ 2 3 / / \ 4 5 6 二叉树的深度,即为二叉树的高度,...原创 2018-08-19 22:45:55 · 151 阅读 · 0 评论 -
每日一题(12)
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针分析: 1 1 / \ / 2 3 2 ...原创 2018-08-19 22:10:42 · 143 阅读 · 0 评论 -
每日一题(13)
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的思路: 1. 如果二叉树为空树,则是对称的 2. 从其子树开始检测,如果根的左右子树: a. 根的左右子树均为空,则是对称的 b. 根的左右子树一棵为空,一棵不为空,则不对称 c. 根...原创 2018-08-19 20:53:18 · 176 阅读 · 0 评论 -
每日一题(14)
设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。如果二叉树的序列化是从根节点开始,那么对应的而反序列化也是从根节点开始的。因此可以使用二叉树的前序遍历来序列化二叉树,当前序遍历碰到null值是,使用“#”表示,每一个节点的数值之间用“,”隔开。/*public class TreeNode { ...原创 2018-08-19 20:33:18 · 137 阅读 · 0 评论 -
逆波兰表达式
逆波兰表达式也叫后缀表达式,先操作数,后操作符例如,5×(6+3)÷3-1 就是中缀表达式。下面这个就是后缀表达式:563+×3÷1- 中缀表达式变后缀表达式方法见到数字直接输出,见到符号按一定规则入栈出栈 规则就是,用当前的符号与栈顶的符号比较优先级,如果当前符号优先级小于栈顶符号的优先级,则把栈里面的符号都弹出来。括号的操作除外,括号是左括号优先级最高,不管跟啥比...原创 2018-08-10 15:21:42 · 5243 阅读 · 1 评论 -
链表面试题
头文件定义及链表结构体声明#pragma once#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#include &lt;assert.h&gt;#include &lt;math.h&gt;typedef int DataType原创 2018-07-09 23:14:28 · 117 阅读 · 0 评论 -
栈与队列的实现
栈栈的声明#pragma once#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <string.h>typedef int DataType;typedef struct Stack{ DataType *st; size_t...原创 2018-06-08 21:33:45 · 254 阅读 · 0 评论 -
栈与队列面试题
实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值)的时间复杂度为O(1)思路: 定义两个栈,一个栈(st)进行入栈出栈操作,一个栈(minst)放当前最小值。那么什么时候更新最小栈数据呢?有两种情况: 1.当最小栈为空栈时,将此时压栈st的数据拷贝到最小栈里。 2.如果当前最小栈的数据&gt;=压栈的数据,满足条件时,进行数据拷贝。 ...原创 2018-06-08 21:24:49 · 321 阅读 · 0 评论 -
栈与队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。不含任何元素的栈称为空栈,栈又称为后进先出(LIFO)的线性表。 栈的分类:顺序表 顺序栈与顺序表数据成员不同,不同之处:顺序栈的入栈和出栈操作只允许对当前栈顶进行操作 顺序栈所有的操作时间复杂度为O(1)链式栈(双向链表) 栈的应用 ...原创 2018-06-08 19:49:26 · 236 阅读 · 0 评论 -
有头双向循环链表
单向KP双向链表单向链表只可向一个方向遍历 查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。也可以提前把一个节点的位置另外保存起来,然后直接访问。双向链表双向遍历 双向链表中不仅有指向后一个节点的指针,还有指向前一个节点的指针。第一个节点的”前连接”指向NULL,最后一个节点的”后连接”指向NULL。 这样可以从任何一个节点访问前一个节点,也可以访问后...原创 2018-05-29 18:38:21 · 444 阅读 · 1 评论 -
链表
链表声明(SList.h)#pragma once#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>typedef int DataType;typedef struct SListNode{ struct SListN...原创 2018-05-27 21:53:29 · 397 阅读 · 0 评论 -
顺序表(动态)
在上一篇我讲了在静态顺序表进行增删找查,排序的等问题。 但是我们在使用静态表时会有一些不方便的地方! 比如,我们在初始化的时候已经指定静态顺序表的大小,如果我们只给顺序表加入一两个元素,那么会造成很大的内存浪费。其次,如果顺序表不够,也不方便扩容。 从而我们引入动态顺序表的概念顺序表声明(SrqList.h)#pragma once#include &lt;stdio.h&gt;...原创 2018-05-27 21:44:21 · 213 阅读 · 0 评论 -
顺序表(静态)
实现一个顺序表的增删查找、排序(冒泡、快速排序)功能编程思想: TDD,模块化实现顺序表的声明(SeqList.h)#pragma once //防止头文件的多次引用#include &amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;lt;stdlib.h&amp;amp;amp;amp;gt;#include &a原创 2018-05-25 23:47:25 · 220 阅读 · 0 评论 -
时间复杂度、空间复杂度进阶
在上一篇我讲到,时间复杂度和空间复杂度的一些概念以及求法(O渐进求法),并且用一些简单的例子进行阐述。 https://mp.csdn.net/mdeditor本篇将使用一些复杂的例子进一步分析!!!二分查找//二分查找非递归#include <stdio.h>int main (){ int arr[]={1,2,3,4,5,6,7,8,9,10};...原创 2018-05-25 01:16:52 · 256 阅读 · 0 评论 -
时间复杂度与空间复杂度
时间复杂度:计算函数语句总的执行次数与问题规模N的函数表达式。比较两段代码时间复杂度好坏的思想相当于跑步,即两种思路:一定时间谁跑的远(执行次数多少)一定距离谁用时少一般算法O(n)计算方法: 1. 用常数1取代运行时间中的所有加法常数 2. 在修改后的运行次数函数中,只保留最高阶项。 3. 如果最高阶项系数存在且不是1,则去除与这个项相乘的常数。...原创 2018-05-24 23:56:02 · 176 阅读 · 0 评论