数据结构与算法
文章平均质量分 89
mick_seu
这个作者很懒,什么都没留下…
展开
-
【数据结构与算法】LCA
参考自:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/03.03.md#23tarjan算法流程那天网易实习笔试题考到了非BST的LCA(最近公共祖先)问题。以前听过很多次了,一直没来得及去做,于是在考试的时候就懵逼了。。赶紧学习下。对于非BST的LCA问题,后来我原创 2016-04-07 19:37:51 · 556 阅读 · 0 评论 -
【数据结构与算法】String 的简单实现
一直以来 String 都是 C++ 里最常被使用到的数据结构,今天有必要熟悉一下其实现。这里学习并小记之。此处我只会实现其最基础的几个函数,异常,线程安全等细节也都未考虑。写完发现还是用到了 #include 头文件,有点囧具体实现参考自:http://noalgo.info/382.html(C++中String类的实现)代码如下,并附有注释:#include #inc原创 2016-07-11 22:16:46 · 1100 阅读 · 0 评论 -
【数据结构与算法】链表题目集合
参考自:http://wuchong.me/blog/2014/03/25/interview-link-questions/(Jark's Blog)链表问题在面试过程中也是很重要也很基础的一部分,链表本身很灵活,很考查编程功底,所以是很值得考的地方。节点定义如下: int val; struct Node* next;};原创 2016-04-28 09:42:48 · 1393 阅读 · 0 评论 -
【DP算法篇之初学】背包问题
昨天做了爱奇艺的内推笔试,编程题又出现了动态规划问题,感觉动态规划出现的概率好大,需要加强下。这里借用背包问题开始我们的学习。背包问题的经典讲解可以参见背包问题九讲,此外我在刷题的过程中发现还发现了背包六问。0 1 背包最经典的 01 背包问题可以描述为:有n个物品,每个物品的重量为w[i],每个物品的价值为v[i]。现在有一原创 2016-08-31 10:13:01 · 13670 阅读 · 1 评论 -
【数据结构与算法】万恶的最长回文子串
注意首先区分子串和子序列的区别。最长回文子序列的计算可以用 KMP 算法,以前做过,但是还没搞懂。这里我们以 leetcode #5. Longest Palindromic Substring 为契机刚好学习下子串的几种常见的求解方式。算法参考自:LeetCode:Longest Palindromic Substring 最长回文子串(JustDoIT)1、暴力原创 2016-09-13 16:59:39 · 885 阅读 · 0 评论 -
【数据结构与算法】二叉树递归与非递归遍历
在C/C++中,二叉树是一种非常重要的数据结构,它的各种遍历也是树结构学习的基础。这里我将刷刷 leetcode 上相关题目。1、前序遍历(Preorder Traversal)递归:class Solution {public: void preOrder(vector &res, TreeNode *root) { if(NULL原创 2016-10-05 14:55:51 · 858 阅读 · 0 评论 -
【数据结构与算法】二叉树前序、中序、后序遍历间关系
参考自:二叉树前序、中序、后序遍历相互求法(凡程子)今天我们关注的依旧是二叉树的基础,前序、中序、后序遍历之间的关系。一、已知前序、中序遍历,求后序。举例说明:前序遍历: GDAFEMHZ中序遍历: ADEFGHMZ画树求法:第一步,根据前序遍历的特点,我们知道根结点为G;第二步,观察中序遍历A原创 2016-10-07 09:44:09 · 9282 阅读 · 0 评论 -
【C/C++】三种在C++里定义比较函数的方法
参考自:3 Ways to Define Comparison Functions in C++STL里有不少东西需要比较函数,例如 sort(),set,priority_queue。下面我们提供三种比较函数。1、定义 operator使用该方法的前提是有默认的比较函数会调用我们的 operator比如我们有如下类,那么我们可以这样定义 operator原创 2016-11-17 21:45:49 · 10800 阅读 · 1 评论 -
【数据结构与算法】初探哈希表
哈希表的存在是为了能够以O(1)平均时间复杂度插入和读取数据。参考《STL源码剖析》和《数据结构与算法分析——C语言描述》两本书,总算让我对哈希表有了一个基本的认识。谈到哈希表就会谈到冲突,两本书无疑都介绍了线性探测,二次探测等方法来解决冲突,不过在SGI STL库里,我们更常常用开放定址法(开链法)来解决冲突。SGI STL 里面的 hashtable 的具体实现是:1)原创 2016-11-18 20:03:40 · 447 阅读 · 0 评论 -
【数据结构与算法】RMQ+ST及线段树
昨天做了一道华为的机试题,关于RMQ。用了自己想的算法,无奈内存超了限制。题目如下:老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩. 输入描述:输入包括多组测试数据。每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。学生ID编号从1原创 2016-04-09 15:27:59 · 782 阅读 · 0 评论 -
【数据结构与算法】String大数加减乘除(非负整数)
leetcode上一题使用String完成大数乘法,鉴于之前华为机试也考到过大数减法,这里做一个大数运算的专题。说到底,大数运算考察的还是对运算的理解,我们完全可以通过模拟手算来进行。注意string与int间的转换,string[] - '0' 变成int,int + '0' 变成 string[]。由于我们希望能用下标与数字的位数对应起来,所以需要用 reverse(s.begin原创 2016-04-12 21:50:24 · 3887 阅读 · 0 评论 -
欧拉回路(poj1041)
最近在学习DFS,欧拉回路什么的。本打算用DFS做这道题,无奈读题不认真,做到一半才发现这道题节点间的路径不止一条,瞬间傻眼,不能用节点DFS做。。就在网上搜了下,看见这篇文章,算法很精巧,代码也很简洁。以下是原文:题意:给你一个无向图,数据格式如点x 点y 边Z,表示由x点和y点构成了Z边。现在要问你该图中是否存在欧拉回路,如果存在,则输出字典序最小的那条欧拉回路(输入按转载 2015-10-07 10:43:28 · 852 阅读 · 0 评论 -
最小生成树(poj1251 poj1861 poj1789)
1. Prim算法该算法与Dijkstra算法十分相似,不同的地方在于Dist矩阵的算法有细微差别。见下面的实现:/*poj 1251time: 0msmemory:220k该题目的输入中每行结尾可能有几个空格,要是用scanf函数,字符串的输入要用字符数组,而不能用单个字符。或者用cin输入。*/#include using namespace std;#define原创 2015-10-01 09:45:12 · 409 阅读 · 0 评论 -
最短路(poj1502 poj3259 poj1125)
1 . Dijkstra算法/* poj 1502Dijkstra + 邻接表 time : 16msmemory : 436k复杂度:O(|E|+|V|^2) 若图是稠密的,算法基本是最优的,若图是稀疏的,则扫描一遍Dist数组花费O(|V|^2)就显得太慢。可以用最小堆存储各节点最小距离,利用最小堆的性质依次让距离最小的节点出堆,可简化代码时间。不过如何使用堆暂时还未想到。原创 2015-09-22 10:14:03 · 738 阅读 · 0 评论 -
强连通性(poj1236 poj2186)
看了poj 1236后没啥思路,网上搜了下,才大概知道了解法。要用到缩点,入度,出度的概念。打算先按照《数据结构与算法分析》里的算法写一个,要用两次DFS,估计性能比较差吧,先试试看。题目大意:有n个学校,学校之间可以传递信息,例如学校 a 可以 传达信息给 b , 即a ——> b , 但 b 不一定 能传递信息给 a 。 告诉你每个学校能够向哪些学校传递信息,然后有两个问题:原创 2015-10-10 16:04:32 · 558 阅读 · 0 评论 -
【DP算法篇之初学】LIS\LCS\二维DP\带条件DP
最近参加2016华为软件精英挑战赛,题目也比较直接,就是求过定点的最短路。这题和以前练得不一样,感觉是不是要用DP(动态规划)。可是对于DP,算法,我还是啥都不懂,于是好好补补。先是参考这篇博文:http://www.hawstein.com/posts/dp-novice-to-advanced.html(动态规划:从新手到专家)看完入门,有点感觉了,然后是LIS问题,文原创 2016-03-14 20:57:44 · 7848 阅读 · 3 评论 -
【数据结构与算法】寻找最大的K个数
腾讯一面遇到这个题,发现这个题真的是比较经典,打算在这里好好总结一下。参考自师姐的博文:http://blog.csdn.net/xiaxia__/article/details/44965455(XIAXIA_的专栏)题目简介:有很多无序的数,我们姑且假定他们各不相等,怎么选出其中最大的K个数呢?解法一:直接排序第一反应,假设有N个数,原创 2016-04-29 09:25:59 · 1861 阅读 · 0 评论 -
【数据结构与算法】排序算法
排序算是算法里最基础、最经典又最常考的问题,今天参加腾讯PC客户端一面,不出所料又考了排序问题,今天打算在这里好好总结并实现几个常见排序。首先是插入排序,插入排序由 N - 1 趟排序组成,对于第 P 趟排序后,保证下标从 0 ~ P 的元素是有序的。插入排序最优情况下(已经排好序)运行时间为 O(N),平均情形下 θ(N^2)。代码实现如下:templatevoid Inser原创 2016-04-26 16:36:20 · 475 阅读 · 0 评论 -
【数据结构与算法】树结构篇一
昨天又被关于树的题目给虐了。。树结构决定了递归是其一个非常重要的方法。今天重新回顾下树结构,并用题目练手。先从树中的最长路径开始:解题的关键在于我们要认识到最长的路径一定是某个节点下的两个最长分支的长度和。这里我们并不一定知道是哪个节点,所以可以使用 set 将每个节点的下的最长路径存储起来,最后返回最大的那个。对于是当前节点的那个两个分支,我们可以使用 vector 存储所有原创 2016-04-21 15:27:02 · 466 阅读 · 0 评论 -
【数据结构与算法】线段树篇二
之前我已经使用线段树完成了简单的题目,现在我要学习下线段树的高阶用法,支持区间更新与区间查询。见:http://harryguo.me/2016/01/22/%E7%BA%BF%E6%AE%B5%E6%A0%91%E8%AE%B2%E8%A7%A3%E4%BA%8C/(HarryGuo)讲的通俗易懂!!懒操作懒操作是线段树的核心操作,这是线段树之所以是log级算法的原因原创 2016-04-19 15:00:50 · 456 阅读 · 0 评论 -
【数据结构与算法】B/B+ 树 、RB树
B / B+ / B*树采用 多叉树 结构降低树深度,主要用在磁盘文件系统与数据库。参考自:1)http://taop.marchtea.com/03.02.html2)https://segmentfault.com/a/11900000046907213)http://blog.codinglabs.org/articles/theory-of-mysql-index.html原创 2016-05-04 16:09:27 · 3143 阅读 · 0 评论