算法与数据结构
文章平均质量分 79
算法和数据结构相关的文章以及面试中常见的算法题~
ai-exception
Github: https://github.com/DmrfCoder;
Gmail: xuefanggang97@gmail.com;
QQ:2296452542
展开
-
LeetCode——single-number-ii(出现一次的数2)
知识点:复杂度本文首发于github题目描述Given an array of integers, every element appears three times except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you imp...原创 2019-04-21 22:20:07 · 225 阅读 · 0 评论 -
LeetCode——single-number(出现一次的数)
知识点:复杂度本文首发于github题目描述Given an array of integers, every element appears twice except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement...原创 2019-04-21 22:18:40 · 165 阅读 · 0 评论 -
LeetCode——word-break(单词切分)
知识点:动态规划本文首发于github题目描述Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.For example, givens =“leetc...原创 2019-04-15 17:00:36 · 326 阅读 · 0 评论 -
LeetCode—— linked-list-cycle(判断链表中是否存在环)
知识点:链表原文地址题目描述Given a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?给定一个链表,判断其中是否存在环。额外要求:尽量不要使用额外空间解题思路使用快慢指针即可。代码public boolean hasC...原创 2019-04-14 13:55:46 · 260 阅读 · 0 评论 -
LeetCode——linked-list-cycle-ii(找出链表中环的入口节点)
知识点:链表[原文地址](https://github.com/DmrfCoder/AlgorithmAndDataStructure/blob/master/LeetCode/Doc/%E6%89%BE%E5%87%BA%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%8E%AF%E7%9A%84%E5%85%A5%E5%8F%A3%E8%8A%82%E7%82%B9.md)题目...原创 2019-04-14 13:37:49 · 588 阅读 · 0 评论 -
LeetCode——reorder-list(链表重排序)
知识点:链表[原文地址](https://github.com/DmrfCoder/AlgorithmAndDataStructure/blob/master/LeetCode/Doc/%E9%93%BE%E8%A1%A8%E9%87%8D%E6%8E%92%E5%BA%8F.md)题目描述Given a singly linked list$ L: L_0→L_1→…→L{n-1}→L_n...原创 2019-04-14 12:49:45 · 316 阅读 · 0 评论 -
LeetCode——binary-tree-preorder-traversal(先序遍历二叉树)
知识点:树原文地址题目描述Given a binary tree, return the postorder traversal of its nodes’ values.For example:Given binary tree{1,#,2,3},return[1,2,3].Note: Recursive solution is trivial, could you do it ...原创 2019-04-13 17:31:03 · 240 阅读 · 0 评论 -
LeetCode——binary-tree-postorder-traversal(后序遍历二叉树)
知识点:树原文地址题目描述Given a binary tree, return the postorder traversal of its nodes’ values.For example:Given binary tree{1,#,2,3},return[3,2,1].Note: Recursive solution is trivial, could you do it ...原创 2019-04-13 17:03:52 · 443 阅读 · 0 评论 -
LeetCode——insertion-sort-list(使用插入排序对链表进行排序)
知识点:排序,链表原文地址题目描述Sort a linked list using insertion sort.解题思路首先明确什么是数组的插入排序:首先将第二个数与第一个数进行对比,如果第二个数比第一个数小,则将第二个数插入到第一个数之前,这样保证前两个数是有序的;接下来将第三个数与前两个数对比,发现有比第三个数大的数即将第三个数插入到对应数的前面,这样一次插入可保证前三个数是有...原创 2019-04-13 11:36:21 · 499 阅读 · 0 评论 -
LeetCode:sort-list(排序List)
知识点:排序,链表原文链接题目描述Sort a linked list in O(n log n) time using constant space complexity.使用常量空间在O(n log n)时间复杂度内对链表进行排序。解题思路首先思考常见排序算法的事件复杂度及空间复杂度(参考:八大常见排序算法介绍):排序方法时间复杂度空间复杂度直接插入排序T...原创 2019-04-12 13:52:16 · 284 阅读 · 0 评论 -
LeetCode:max-points-on-a-line(同一条直线上的点的最大数量)
原文地址知识点:穷举题目描述Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.给定2D平面上的n个点,找到位于同一直线上的最大点的数量。解题思路首先明确如何量化"直线"这一概念,最简单的,我们可以固定一个起始点S(Start),然后遍历剩余...原创 2019-04-12 11:03:48 · 596 阅读 · 0 评论 -
LeetCode:计算逆波兰式的值(evaluate-reverse-polish-notation)
原文地址知识点:栈题目描述Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are+,-,*,/. Each operand may be an integer or another expression.Some examples:计算逆波兰式的值,给定式...原创 2019-04-12 11:01:41 · 364 阅读 · 0 评论 -
LeetCode: 二叉树的最小深度(minimum-depth-of-binary-tree)
原文地址知识点:树题目描述Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.给定一个二叉树,找出其最小的深度。最小的深度指的是...原创 2019-04-12 10:59:10 · 208 阅读 · 0 评论 -
随机算法
概述随机算法是一种在接受输入的同时,为了随机选择的目的,还接受一串随机比特流并且在运行过程中使用该比特流的算法(允许算法在执行过程中随机地选择下一个计算步骤)。随机算法通常有两个优点:较之那些我们所知的解决同一问题最好的确定性算法,随机算法所需的运行时间或空间通常小一些。随机算法比较易于理解和实现(呵,站着说话不腰疼)。随机算法的基本特征:对所求解问题的同一实例用同一随机算法...原创 2018-05-17 08:35:26 · 9277 阅读 · 0 评论 -
NP完全问题
如果一个算法的最差时间效率属于 O ( p ( n )) ,其中 p (n ) 是问题输入规模 n 的一个多项式函数,我们说该算法能够在多项式的时间内对问题求解。 我们把可以在多项式时间内求解的问题称为易解的,而不能在多项式时间内求解的问题则称为难解的。非正式地说,我们可以把那些能够在多项式时间内求解的问题当作计算机科学家所说的* P 集合*。 正式点,只有那些能够回答是或否的问题(又称判...原创 2018-05-14 20:07:21 · 5868 阅读 · 1 评论 -
贪心算法
引言所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。 所以对所采用的贪心策略一定要仔细分析其...原创 2018-05-08 20:25:41 · 4937 阅读 · 0 评论 -
算法分析基本概念
二分搜索Linearsearch/* * 输入:n个元素的数组A[1...n]、x * 输出:如果x=A[j]&&1<=j<=n,则输出j,否则输出0 */int Linearsearch(int *A,int x, int n){ int j=0; while (j<n&&x!=A[j]){ ...原创 2018-05-14 19:30:31 · 1122 阅读 · 0 评论 -
动态规划
什么是动态规划基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。动态规划是一种被广泛用于求解组合最优化问题的算法。算法思想算法思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息...原创 2018-05-07 21:13:43 · 521 阅读 · 0 评论 -
算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)简介
Θ,读音:theta、西塔;既是上界也是下界(tight),等于的意思。Ο,读音:big-oh、欧米可荣(大写);表示上界(tightness unknown),小于等于的意思。ο,读音:small-oh、欧米可荣(小写);表示上界(not tight),小于的意思。Ω,读音:big ome...转载 2018-04-29 10:44:21 · 2913 阅读 · 0 评论 -
归纳法
只调用一次的递归叫做尾递归基数排序算法思想基数排序需要经历d次,d为所要排序数列中位数最多的数的位数,其过程是首先根据数列中数的个位的数值将所有数入0~9这10个队列,然后从0~9将元素依次出队,然后再根据十位元素的数值再次入队,然后出队,以此类推重复d次,最终即可完成排序。时间空间复杂度及稳定性T(n)=O(d*n) d为排序数中最大数的位数S(n)=O(n)...原创 2018-04-29 15:16:51 · 763 阅读 · 0 评论 -
分治算法
什么是分治一个分治算法把问题实例划分为若干个子问题(一般是两个),并分别使用递归解决每个子实例,然后把这些子实例的解组合起来,得到原问题的解。举个栗子考虑这样一个问题:我们需要在序列A[1….n]中找到该序列的最大值元素和最小值元素,一种直接的算法是扫描一遍A序列,用两个标志位max和min分别表示最大值和最小值元素,然后扫描时根据每个元素与当前最大最小值的比较情况动态调整最大最小...原创 2018-04-30 16:45:40 · 8225 阅读 · 0 评论 -
回溯算法
概述回溯算法是一种组织搜索的一般技术,它常常可以避免搜索所有的可能性,适用于求解那些有潜在的大量解但是有限个数的解已经检查过的问题。3着色问题问题描述给出一个无向图G=(V,E),需要用三种颜色之一为V中的每个顶点着色,要求没有两个相邻的顶点有相同的颜色。算法思想我们称没有两个邻接顶点有同样颜色的着色方案为合法的,反之成为非法的。如果不考虑合法性的要求,给出n个...原创 2018-05-07 17:19:42 · 4880 阅读 · 1 评论 -
堆和不相交集数据机构——堆
堆在很多情况下我们需要使用一种具有插入元素和查找最大值元素的数据结构,这种数据结构叫做优先队列,如果采用普通队列,那么寻找最大元素需要搜索整个队列,开销比较大;如果使用排序数组,插入运算就需要移动很多的元素,开销也会比较大。这时候堆就是一种有效的实现优先队列的数据结构。堆的特点:父节点大于等于子节点(但是两个子节点之间的大小关系没有要求),这样可以做到沿着每条从根节点到叶子节点的路径...原创 2018-04-29 10:37:08 · 314 阅读 · 0 评论 -
两种不同方式解决八皇后问题
八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。原创 2017-11-20 19:28:57 · 844 阅读 · 0 评论 -
数据结构之二叉树的遍历算法合集
摘要:今天用C撸了一遍数据中二叉树常见操作的实现,将实现过程中感觉有意思的几个功能实现记录下来方便以后复习~先序遍历递归实现原创 2017-11-22 22:55:56 · 422 阅读 · 0 评论 -
判断一棵二叉树是否是完全二叉树的方法
主要思路是利用二叉树层次遍历的原理开始对二叉树进行层次遍历,特殊点在于遍历的时候将NULL也入队作为标记,如果当遍历到NULL的时候队列中仍然后feiNULL元素未被遍历,说明该二叉树中有非空点在空点的右边,即不是完全二叉树。原创 2017-11-22 23:38:00 · 387 阅读 · 0 评论 -
八大常见排序算法介绍
直接插入排序算法思想首先将第二个数与第一个数进行对比,如果第二个数比第一个数小,则将第二个数插入到第一个数之前,这样保证前两个数是有序的; 接下来将第三个数与前两个数对比,发现有比第三个数大的数即将第三个数插入到对应数的前面,这样一次插入可保证前三个数是有序的; 以此类推,将后面的i个数分别其前面的i-1个数进行对比,并将其插入到第一个比其大的数前面,最后即可完成排序。时间原创 2018-01-13 21:26:07 · 270 阅读 · 0 评论