数据结构与算法
文章平均质量分 96
pcwl1206
这个作者很懒,什么都没留下…
展开
-
数据结构与算法知识点目录与专栏推荐
在写这篇博客之前一直在犹豫,要不要将《数据结构与算法》这个专题的知识点以博客的形式记录下来,方便日后复习,但是又纠结于自己的水平有限,写不出来什么高质量的文章,更何况很多大佬的博客都有《数据结构与算法》的专题,而且写这个系列的文章必定需要大量的时间。虽然很不想写,但是数据结构与算法是必须拿下的,更何况除了刷题也没有其他更好的学习方式了,那就花点时间把重要的知识点都用博客的形式总结下来的,这样一方面...原创 2018-10-11 10:18:58 · 308 阅读 · 0 评论 -
字符串的排列与组合【Java 递归实现】
我们在笔试中经常会遇到需要对字符串进行排列或者组合的题目。本篇文章对字符串的排列和组合进行递归版本的实现。如果你有更简单易懂的方法,一定要在评论区留下来~1、字符串的组合【子序列】题目:输入一个字符串,输出该字符串中字符的所有组合。例子:输入:abc,它的组合有:a、b、c、ab、ac、bc、abc分析:我们可以将字符串中的每个字符看成二叉树的一个节点,根节点为空,每个节点都...原创 2019-04-13 15:34:08 · 1703 阅读 · 2 评论 -
【搞定算法】归并排序及其解决逆序对数、小和问题
归并排序也是分治法一个很好的应用,先递归到最底层,然后从下往上每次两个序列进行归并合起来,是一个由上往下分开,再由下往上合并的过程。而对于每一次合并操作,对于每一次 merge 的操作过程如下:1、准备一个额外的数组(help),使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;2、设定两个指针,最初位置分别为两个已经排序序列的起始位置;3、比较两个指针所指向的元素,选择...原创 2019-07-07 18:34:30 · 2871 阅读 · 2 评论 -
【LeetCode】第560题:和为K的子数组
LeetCode 链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/comments/题目:给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长...原创 2019-07-09 15:31:16 · 2249 阅读 · 0 评论 -
【搞定算法】二叉树信息收集问题(高度套路)
目 录:1、舞会的最大活跃度2、求一棵二叉树的最大搜索二叉子树的结点个数3、求一棵二叉树的最远距离最近看了左神的高阶算法视频,觉得很多算法题目解题思路确实是非常套路化的。本文整理了左神算法讲解中关于二叉树信息收集问题的高度套路。都是首先想好假设,想和子树要什么样的信息,然后自己拿到这个信息需要返回自己的什么信息。高度套路化:列出可能性 -> 从子过程收集的信息中整合出...转载 2019-07-04 11:48:37 · 574 阅读 · 0 评论 -
【搞定算法】蓄水池算法
1、问题描述分析采样问题经常会被遇到,比如:1、从 100000 份调查报告中抽取 1000 份进行统计;2、从一本很厚的电话簿中抽取 1000 人进行姓氏统计;3、从 Google 搜索 "Ken Thompson",从中抽取 100 个结果查看哪些是今年的。既然说到采样问题,最重要的就是做到公平,也就是保证每个元素被采样到的概率是相同的。所以可以想到要想实现这样的算法,就需...转载 2019-07-04 15:55:05 · 2963 阅读 · 1 评论 -
【搞定算法】KMP 算法
目 录:1、问题描述2、next 数组3、代码实现4、KMP 的应用4.1、子树问题4.2、加最短字符问题前面讲过字符串匹配的其他几种算法:字符串匹配算法之 BF、RK、BM。本文用来讲解 KMP 算法及其应用,KMP 算法时间复杂度为:O(N + M),空间复杂度为:O(M)。1、问题描述给定两个字符串 O 和 f,长度分别为 n 和 m,判断 f 是否...原创 2019-07-06 15:57:45 · 524 阅读 · 0 评论 -
【搞定算法】Manacher 马拉车算法
求一个字符串中的最长回文子串,这是一道经典的面试题目,解法有很多,详细可见:最长回文子串问题。其实个人感觉 Manacher 算法代码实现还是有一定难度的,真正在做题目的时候采用的可能性不是很大,但是由于 Manacher 算法求解回文子串方面的时间复杂度为 O(N),所以了解其思想还是很有必要的,coding 能力比较强的话,采用 Manacher 算法解决最长回文子串问题更是最合适不过了。...原创 2019-07-06 18:19:56 · 431 阅读 · 0 评论 -
【搞定算法】最长回文子串问题
该题目是 LeetCode 上的第五题:最长回文子串。题目:给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。本文给出该题目的三种解法:暴力解法、动态规划、Manacher 算法。暴力解法无法通过运行时间、Manacher 算法有点复杂,所以在真正笔试的时候,我会选择动态规划。但是要是在面试中遇到这道题,可以采用 Manacher 算法进行优化。...原创 2019-07-06 20:26:08 · 242 阅读 · 0 评论 -
【搞定算法】滑动窗口问题:窗口内最大值、最小值的更新结构
目 录:1、滑动窗口2、滑动窗口的应用2.1、生成窗口最大值数组 2.2、求一个数组中最大值减去最小值小于或等于 num 的子数组数量(要求O(N))1、滑动窗口生成窗口的最大值或者最小值数组,时间复杂度:O(N)。可阅读:https://www.cnblogs.com/haozhengfei/p/a14049ec0869a8125a69f3af37471c77.htm...原创 2019-07-18 15:34:19 · 3667 阅读 · 0 评论 -
【搞定算法】BFPRT 算法、快排解决第 k 大数问题
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验。目 录:方法1:暴力解法方法2:快排实现【笔试版+面试版】方法3:BFPRT 算法实现【面试优化版】问题:求一个数组中的第 k 小 / 大的数。说明:这道题求解不难,主要的目的是为了引出 快排算法的应用(partiotion)和 BFPRT 算法...原创 2019-07-07 15:56:46 · 1787 阅读 · 1 评论 -
【搞定算法】字符串的翻转和旋转及其应用
目 录:一、字符串的翻转1、StringBuilder 实现2、双指针实现3、字符串翻转应用二、字符串的旋转1、三步翻转实现旋转【重点】2、String 的 substring 方法实现面试和笔试中我们也经常遇到字符串相关的翻转和旋转的题目。本文就对字符串的翻转和旋转做个简单的用法总结。一、字符串的翻转1、StringBuilder 实现可以直接利用 S...原创 2019-07-21 16:02:42 · 766 阅读 · 1 评论 -
【搞定算法】单调栈问题:直方图中的最大矩形面积、求最大子矩阵的大小、可见山峰问题
目 录:1、单调栈结构1.1、单调栈结构的实现:无重复元素1.2、单调栈结构的实现:有重复元素2、单调栈结构的应用2.1、直方图中的最大矩形面积2.2、求最大子矩阵的大小2.3、可见山峰问题本文主要用于讲解一种在面试笔试中经常使用到的一种算法结构:单调栈结构。1、单调栈结构单调栈结构:给一个数组,求任何位置左边和右边离它最近的比它大/小的数。要求:栈...原创 2019-07-22 15:57:29 · 2864 阅读 · 1 评论 -
【搞定算法】常见算法题分类总览
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。完善中......由于本人平时刷题比较零散,有时候找起来不是很方便,所以统一将题目记录于此。主要的题目来源自:剑指 Offer、LeetCode、左神算法、面试、笔试、面经等等。下面按照分类记录:说明(个人见解):一、标注说明...原创 2019-07-26 15:24:05 · 25625 阅读 · 4 评论 -
【搞定算法】Morris 遍历二叉树:前序、中序、后序
目 录:1、Morris 遍历的基本概念2、Morris 的前序遍历3、Morris 的中序遍历4、Morris 的后序遍历其实之前的文章里已经记录了二叉树的递归/非递归遍历代码实现。但是由于 Morris 遍历可以实现最优的遍历方式,这无疑是在面试时遇到此问题非常加分的回答。1、Morris 遍历的基本概念Morris 遍历:时间复杂度 O(N)、额外空间复杂度 ...原创 2019-07-23 11:50:08 · 849 阅读 · 1 评论 -
【数据结构与算法】之字符串匹配算法之 BF、RK、BM --- 第十八篇
本文为极客时间《数据结构与算法之美》专栏的学习笔记。本文目录:1、BF 算法2、RK 算法3、BM 算法3.1 BM 算法的核心思想 3.2 BM 算法原理分析3.2.1 坏字符规则 3.2.2 好后缀规则3.2.4 BM 算法代码实现3.2.5 BM 算法的性能分析及优化4、总结本文主要讲述字符串匹配常用的几种算法,它们分别是:BF 算...转载 2019-01-28 22:57:22 · 958 阅读 · 0 评论 -
【数据结构与算法】之深度和广度优先搜索 --- 第十七篇
上一篇:图的基本概念:https://blog.csdn.net/pcwl1206/article/details/84751541本文为极客时间《数据结构与算法之美》专栏的学习笔记:原文链接(点击)本文目录:1、什么是“搜索”算法 2、广度优先搜索(BFS)3、深度优先搜索(DFS)4、总结在上一节中,讲述了图的表示方法,讲到如何用有向图、无向图来表示一个社交网络。在...转载 2019-01-28 09:32:25 · 240 阅读 · 0 评论 -
【数据结构与算法】之图的基本概念 --- 第十六篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。上一篇:堆的详解:https://blog.csdn.net/pcwl1206/article/details/84608381目 录:一、基本概念1.1 图的定义1.2 图中的术语1.3 图的分类二、图的存...转载 2018-12-03 16:08:03 · 764 阅读 · 1 评论 -
【数据结构与算法】之复杂度分析---第一篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。一、首先明确两个问题:1、为什么需要对算法进行复杂度分析?实际上一个算法执行所耗费的时间和空间是无法从理论上准确算出来的,必须在计算机上实际运行才知道,但是我们不可能对每个算法都先在计算机上运行一遍,再决定采用其中效率最高的那个。所...原创 2018-10-11 17:26:10 · 618 阅读 · 0 评论 -
【转载】之数据结构文章汇总,持续更新...
最近在学习数据结构与算法,但是书本上很多语言难以理解,所以将学习过程中看到不错的博客汇总记录下来: 准备部分:复杂度分析 第一部分:线性表1、Java单链表、双端链表、有序链表的实现2、LRU缓存第二部分:散列表 第三部分:树 第四部分:图 第四部分:字符串匹配1、KMP算法详解 第五部分:排序 第六部分:搜索 第七部...原创 2018-09-30 13:39:18 · 200 阅读 · 0 评论 -
【数据结构与算法】之单链表、双链表、循环链表的基本介绍及其Java代码实现---第三篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。一、链表的基本介绍链表的定义:链表是一种递归的数据结构,它或者为空(null),或者是指向一个结点(node)的引用,该结点含有一个泛型的元素和一个指向另一条链表的引用。----Algorithms Fourth Edition...原创 2018-10-13 14:19:15 · 865 阅读 · 0 评论 -
【数据结构与算法】之数组---第二篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。先来看下数组的定义:数组(Array):是一种线性表结构。它用一组连续的内存空间来存储一组具有相同类型的数据,同时它也是最基础的数据结构。提到数组就不得不说线性表: 数据排成一条线,每个线性表上的数据最多只有前后两个方向。常见的...原创 2018-10-13 14:18:04 · 495 阅读 · 0 评论 -
【数据结构与算法】之栈的基本介绍及其数组、链表实现---第四篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。一、栈的基本介绍1、栈的基本概念栈是一种限制在一端进行插入和删除操作的线性表数据结构。栈中有两个比较重要的操作:push(压栈:将元素压入栈顶)和pop(弹栈:从栈顶弹出一个元素)。都满足先进后出、后进先出的特点!从图中...原创 2018-10-14 10:23:52 · 326 阅读 · 0 评论 -
【数据结构与算法】之队列的基本介绍及其数组、链表实现---第五篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。一、队列的基本概念1、定义队列是一种先进先出的线性表。它只允许在表的前端进行删除操作,而在表的后端进行插入操作,具有先进先出、后进后出的特点。进行插入操作的一端成为队尾(tail),进行删除操作的一端称为队头(head)。当队列中...原创 2018-10-14 21:35:48 · 437 阅读 · 0 评论 -
【数据结构与算法】之递归的基本介绍---第六篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。一、递归的基本概念1、定义递归:指的是一个过程,函数直接或者间接的调用自己,此时则发生了递归。递归的两个要素:递推公式和递归边界可以看到递归的定义非常的简洁,但是理解起来就没有这么容易了。不知道大家是否和我一样,在遇到递...原创 2018-10-15 15:25:27 · 635 阅读 · 0 评论 -
【数据结构与算法】之排序全家桶(十大排序详解及其Java实现)---第七篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。本篇文章汇总了10种场常见的排序算法,篇幅较长,可以通过下面的索引目录进行定位查阅:一、排序的基本概念二、十大经典排序算法1、冒泡排序2、插入排序3、希尔排序4、选择排序5、归并排序6、快速排序7、桶排序...原创 2018-10-21 09:56:35 · 769 阅读 · 1 评论 -
【数据结构与算法】之跳表(Java实现)---第九篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。说明:跳表是一种不太常用的数据结构,很多书籍上甚至都没有提及过,我也是学习极客时间中的《数据结构与算法之美》专栏的时候才知道这种数据结构,但是感觉这种数据结构真的有很多优点,看了一些博客讲的都很片面,所以在这里决定把专栏中的这篇文章mark...原创 2018-10-30 17:35:10 · 17653 阅读 · 14 评论 -
【数据结构与算法】之散列表(Java实现)---第十篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。目录:一、散列表基本概念1、基本定义2、散列表思想二、散列函数1、定义2、散列函数设计的基本要求3、如何设计散列函数三、散列冲突1、开放寻址法2、链表法3、如何选择散列冲突解决的方法四、装载因...原创 2018-11-03 20:58:09 · 5909 阅读 · 2 评论 -
【数据结构与算法】之二分查找(Java实现)---第八篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。一、二分查找的基本介绍1、二分查找:是一种查询效率非常高的查询算法,又称为折半查找。2、要求:(1)必须采用顺序存储结构,一般都是使用数组; (2)必须按关键字大小有序排列。3、基本思想:...原创 2018-10-27 23:04:31 · 358 阅读 · 0 评论 -
【数据结构与算法】之哈希算法 --- 第十一篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。开篇说明:本文内容大部分出自于极客时间中的《数据结构与算法之美》专栏,Mark下来,作为个人笔记,方便日后复习。在上一篇博客中,讲解了散列表的用法,如果你对散列表还不是很了解,可以点击此链接进行查看:https://blog.csdn....转载 2018-11-09 15:34:29 · 2113 阅读 · 0 评论 -
【数据结构与算法】之树的基本概念及常用操作的Java实现(二叉树为例) --- 第十二篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。树是一种非线性数据结构,这种数据结构要比线性数据结构复杂的多,因此分为三篇博客进行讲解:第一篇:树的基本概念及常用操作的Java实现(二叉树为例)第二篇:二叉查找树第三篇:红黑树本文目录:1、基本概念1.1 什么是...原创 2018-11-16 18:11:49 · 513 阅读 · 0 评论 -
【数据结构与算法】之红黑树 --- 第十四篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。树是一种非线性数据结构,这种数据结构要比线性数据结构复杂的多,因此分为三篇博客进行讲解:第一篇:树的基本概念及常用操作的Java实现(二叉树为例)第二篇:二叉查找树第三篇:红黑树第三篇:红黑树开篇说明:对于红黑树的学习,...原创 2018-11-19 14:41:23 · 503 阅读 · 0 评论 -
【数据结构与算法】之二叉查找树 --- 第十三篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。树是一种非线性数据结构,这种数据结构要比线性数据结构复杂的多,因此分为三篇博客进行讲解:第一篇:树的基本概念及常用操作的Java实现(二叉树为例)第二篇:二叉查找树第三篇:红黑树本文目录1、二叉查找树的基本概念2、二...原创 2018-11-17 13:22:53 · 469 阅读 · 0 评论 -
【数据结构与算法】之堆的详解 --- 第十五篇
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。上一篇:红黑树:https://blog.csdn.net/pcwl1206/article/details/84227825目 录:一、堆的基本概念二、堆的实现1 往堆中插入一个元素2、删除堆顶元素3、时间复杂度...转载 2018-11-29 15:35:34 · 437 阅读 · 0 评论 -
【搞定算法】字符串的最长公共子串和最长公共子序列
目 录:1、求两个字符串的最长公共子串2、求两个字符串的最长公共子序列动态规划实现 求两个字符串的最长公共子序列的长度1、求两个字符串的最长公共子串要求:求两个字符串的最长公共子串,如:“abcdefg” 和 “adefgwgeweg” 的最长公共子串为 “defg”(子串必须是连续的)。 暴力解法【O(N^2)】 1、选出两个字符串中长度较短的那个字符串;...原创 2019-08-01 20:44:49 · 1013 阅读 · 0 评论