
数据结构和算法
玉米味土豆片
在路上
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉查找树(C++实现)
其实所谓的二叉搜索树、二叉查找树、二叉排序树都是同一种东西,顾名思义Binary Search Tree是一种有利于查找数据的数据结构。其实在实际场景中用得最多的是红黑树,也是一种特殊的二叉平衡树;而二叉平衡树又是一种特殊的二叉查找树,也就是说,二叉查找树是一种范围很大的二叉树类别。当在二叉查找树中查找元素的时候,BSTree从根节点出发,通过比较查找目标与当前节点的数值,判断下一步...原创 2018-05-02 15:27:21 · 340 阅读 · 0 评论 -
leetcode岛屿的个数:广度优先搜索(BFS)
题目: 岛屿的个数给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。解体思路:这是一道标准的广度优先搜索题,可以尝试用递归的方法或者非递归的方法。比较重要的一点就是要进行边界检查:因为网格是给定的,所以在BFS过程中要保证每个节点都是有效没有越界的。...原创 2018-12-31 23:01:07 · 2671 阅读 · 0 评论 -
leetcode验证二叉搜索树
题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。这是leetcode里面我遇到的一道比较有意思的题目,题目的意思非常清楚:输入一棵树,判断它是不是二叉搜索树。大家对二叉搜索树的概念应该非常熟悉,题目中也非常清楚地给出了判...原创 2018-12-15 00:07:31 · 1193 阅读 · 1 评论 -
筛法快速求素数——leetcode计数质数
在算法竞赛中经常会遇到求质数的问题,这种题目一般都是要求出一定范围内[0,n]所有的质数或者质数的个数。最直接的思路就是根据质数的定义来判定一个数是不是质数(即一个数不能被除1和它本身外的任何数整除),如果我们需要对所有的数都这样进行判断,那么当n非常非常大的时候,这种算法的时间开销就会非常大,大概为O(n^2)。这个时候就可以使用筛法来快速地求出素数,筛法求素数的基本思路就是:除了0、1之外,所...原创 2018-11-17 20:04:16 · 1089 阅读 · 1 评论 -
模式串匹配:KMP算法和AC自动机(二)
博客《模式串匹配:KMP算法和AC自动机(二)》中讲了KMP原理和实现,KMP算法针对的是单模式串的匹配问题,而AC自动机是能够解决多模式穿匹配问题的算法,曾尝试自己实现一个AC自动机,但是发现还是挺有难度的,于是在网上看了一些大神的模板,在这里转发学习一下~下面的博客转自:KMP 大多 是用来解决 单串单串匹配 的 问题的~AC自动机 则是在 KMP 的 基础上 用来解决一大串里面的...转载 2018-11-05 21:14:53 · 426 阅读 · 0 评论 -
leetcode打家劫舍:动态规划(三)
博客《leetcode——动态规划(一):最大子序和》已经结合题目把动态规划的思想原理大概讲了一下,那么这篇博客主要针对更多典型的动态规划的题目,来对动态规划思想的应用进行更进一步的探讨。《leetcode——动态规划(二):爬楼梯》讨论了一道非常简单的题,这篇博客又要讲leetcode上另一道非常简单的题目:打家劫舍。打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现...原创 2018-11-05 20:57:21 · 334 阅读 · 0 评论 -
leetcode爬楼梯:动态规划(二)
博客《leetcode——动态规划(一):最大子序和》已经结合题目把动态规划的思想原理大概讲了一下,那么这篇博客主要针对更多典型的动态规划的题目,来对动态规划思想的应用进行更进一步的探讨。这篇博客主要讲leetcode上一道非常简单的题目:爬楼梯。爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n...原创 2018-11-05 20:46:10 · 159 阅读 · 0 评论 -
leetcode最大子序和:动态规划(一)
动态规划是一种非常重要的算法思想,毕竟是一种思想,所以在逻辑层面的体现并没有一个固定的形式,但是处理问题的方式却都是本着一个原则:将一个问题递归分解为它的子问题进行求解,也许有人会问:这不是分治的思想嘛?因为问题分解的过程中往往会产生很多重复的子问题,这个时候动态规划和分支的区别就会体现出来,动态规划会将需要重复解决的子问题的结果在第一次计算之后就保存起来,之后碰到重复的子问题都可以直接得到结果,...原创 2018-11-05 20:20:19 · 203 阅读 · 0 评论 -
模式串匹配:KMP算法和AC自动机(一)
模式串匹配也称字符串匹配,是在计算机中用得非常多的一种操作。这篇博客主要记录两种常见的字符串匹配算法的学习历程,它们分别是KMP算法和AC自动机。其中KMP是迄今为止用得最为广泛并且算法效率极高的一种单模式串匹配的算法,相比朴素字符串匹配算法O(n*m)的时间复杂度(其中n为主串的长度,m为模式串的长度),KMP的时间复杂度只有O(n+m),在主串长度远大于模式串的长度时,KMP的效率是相当优秀的...原创 2018-10-05 23:17:45 · 832 阅读 · 0 评论 -
线性回归原理及实现(二):梯度下降法
之前我写的一篇博客《线性回归原理及实现(一):最小二乘法》写了有关线性回归的基本原理和应用场景的内容,提到了两个实现线性模型回归的方法:最小二乘法和梯度下降,并给出了最小二乘法的推导和python实现代码;这篇博客则是承接上一篇没有写完的内容,主要写线性回归的梯度下降法的原理和代码实现。其实梯度下降非常容易理解,如果将损失函数的分布简化理解成一张凹凸不平的曲面,那么梯度下降的过程就有点像我们郊游爬...原创 2018-06-07 13:31:43 · 1344 阅读 · 1 评论 -
二叉树前中后序遍历非递归实现C++
前几天面试过程中面试官让手写一下二叉树后序遍历的非递归写法,当时没有写出来,本想着可能是因为面试太紧张的原因,才这么简单的题都没写出来,后来特地去研究了一下,发现二叉树的后序遍历非递归实现还真的没我想的那么简单,在此写个博客记录一下,顺便把前序和中序的非递归实现也写出来。后序遍历非递归实现#include <iostream>#include <stack>usi...原创 2019-09-30 23:57:08 · 922 阅读 · 1 评论