数据结构
dreamispossible
书中自有黄金屋
展开
-
你想要了解的贪心算法都在这里
贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。基本思路1.建立数学模型来描述问题;2.把求解的问题分成若干个子问题;3.对...原创 2019-10-24 20:32:36 · 1246 阅读 · 0 评论 -
腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树?
1、二叉查找树的缺点二叉查找树,相信大家都接触过,二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图基于二叉查找树的这种特点,我们在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)。之所以说是正常情况下,是因为二叉查找树有可能出现一种极端的情况,例如这种情况也是满...原创 2019-06-19 23:46:35 · 1727 阅读 · 0 评论 -
字符串匹配BM(Boyer-Moore)算法:文本编辑器中的查找功能是如何实现的?
写在前面的的话关于字符串匹配算法有很多,之前我有写过一篇 KMP 匹配算法:https://blog.csdn.net/dreamispossible/article/details/91359237 不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多。至于选择哪一种字符串匹配算法,在不同的场景有不同的选择。在我们平时文档里的字符查找里采用的就是 Bo...原创 2019-06-17 22:42:27 · 1131 阅读 · 0 评论 -
一看就懂的贪心算法
写在前面的话今天我介绍的主题是贪心算法。这是相对比较容易的一种算法。我这里不给出定义,因为大家可以自行网络搜索。咱们直接看例子。贪心算法,如果不用手动证明一个问题的数学性质的话,其实是比较简单的。看这样一个例子:假设有一个背包,其最大容量是50KG,现在有各种不同价值的液体,比方说,有水,其价值是10 每千克,共100KG;酒精,其价值是20 每千克,共30KG;有油,价值25每千克,共30...原创 2019-06-22 23:28:56 · 1015 阅读 · 0 评论 -
一行代码解决约瑟夫环问题
约瑟夫环问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。1、方法一:数组在第一次遇到这个题的时候,我是用数组做的,我猜绝大多数人也都知道怎么做。方法是这样的:用一个数组来存放 1,2,3 … n 这 n 个编号,...原创 2019-07-17 21:00:14 · 13599 阅读 · 6 评论 -
Leetcode:刷完31道链表题的一点总结
前言今天终于刷完了 Leetcode 上的链表专题,虽然只有 31 道题(总共是 35 道,但有 4 道题加了锁)而已,但也陆陆续续做了两三个星期,严重跟不上原先计划啊。先写一篇博客总结一下这阵子刷链表题的收获吧,有输入也要有输出。这里就不花篇幅介绍链表的一些基本概念了,不清楚的看官就自行百度一下吧,本文主要介绍一些常见的链表题和解题思路。正文缓存不得不说使用数组 / map 来缓存链...原创 2019-07-24 22:57:50 · 1006 阅读 · 0 评论 -
浅析动态规划-----------不看后悔系列
写在前面的话讲道理,我对dp这块的理解并不深,当初学的时候,也仅仅停留在一些名词上。比如大佬们经常说的数位dp,树形dp,区间dp,插头dp,棋盘dp,背包dp等等。。。那究竟什么是dp呢?维基百科上是这样定义的:DP就是一种方法,该方法能够将复杂的问题分解成为一系列简单的子问题。时隔一段时间了,准备好好把dp这个算法总结总结,不会的地方抓紧补上,会的地方夯实夯实,写出一些自己不一样的...原创 2019-08-05 23:05:33 · 1024 阅读 · 0 评论 -
如何优雅的反转单链表以及变种形式
【题目描述】反转单链表。例如链表为: 1->2->3->4反转后为: 4->3->2->1【要求】 :如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1).【解答】方法1这道题还是挺简单的,当我们在反转一个节点的时候,把一个节点的后驱改为指向它前驱就可以了。这里需要注意的点就是,当你把当前节点的后驱指向前驱的时候,这个时...原创 2019-08-20 19:23:25 · 1179 阅读 · 1 评论 -
我所理解的KMP算法
字符串匹配算法字符串匹配是计算机的进行的非常频繁的算法。简单的说,有一个字符串 I have a dream. 。我想知道的事情是,里面是否包含另一个字符串 dream ?因为执行的非常频繁,所以算法的效率也就十分重要。而本文所说的KMP算法,无疑是速度上面的佼佼者,它可以在 O(n+m) 的时间完成匹配。KMP算法由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因...原创 2019-06-09 23:54:36 · 813 阅读 · 0 评论 -
阶乘相关的一些面试题
案例一 给定一个整数 N,那么 N 的阶乘 N! 末尾有多少个 0?例如: N = 10,则 N!= 3628800,那么 N! 的末尾有两个0。 有些人心想,这还不简单,直接算出 N!的值,然后用除以 10 来判断多少个 0 就可以了。 ...原创 2019-06-08 16:39:15 · 1044 阅读 · 0 评论 -
详解递归思想
写在前面的话可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了!可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不知道怎么使用,有时候还容易被递归给搞晕。最近看了很多关于递归的知识,谈谈我的一些经验,或许,能够给你带来一些帮助。为了兼顾初学者,我会从最简单的题讲起!递归的三...原创 2019-05-25 22:39:15 · 20026 阅读 · 12 评论 -
队列的基本
重点内容原创 2018-09-20 10:35:29 · 112 阅读 · 0 评论 -
桶排序冒泡排序、以及快速排序总结
问题的提出:原创 2018-11-15 23:21:49 · 197 阅读 · 0 评论 -
求第 N 个 斐波那契数的多种方法
斐波那契数列 是一个非常美丽、和谐的数列,也是一个黄金分割数列。符合黄金分割比0.618。有人说它起源于一对繁殖力惊人、基因非常优秀的兔子,也有人说远古时期的鹦鹉就知道这个规律。     斐波那契数列由如下递推关系式定义:       &a原创 2018-05-22 23:18:46 · 12360 阅读 · 3 评论 -
单例模式中的饿汉模式和懒汉模式详解
设计模式原创 2018-12-01 08:36:09 · 354 阅读 · 4 评论 -
常见排序算法复杂度分析
常见的排序算法:原创 2019-01-31 21:13:04 · 367 阅读 · 0 评论 -
左旋字符串
题目描述: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾 部,如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的 函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。...原创 2019-03-13 23:47:58 · 99 阅读 · 0 评论 -
全排列(含递归和递归的解法)
题目用c++写一个函数,如Full_Array(const char * str),打印出str的全排列。例如:abc的全排列:abc ,acb,bca,bac,cab,cba。原创 2019-03-15 23:10:20 · 371 阅读 · 0 评论 -
常见面试题之布隆过滤器的使用案例(海量数据)
题目描述 一个网站有 100 亿 url 存在一个黑名单中,每条 url 平均 64 字节。这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中? 题目解析  ...原创 2019-05-08 20:35:26 · 4256 阅读 · 3 评论 -
二叉树的基本
二叉树原创 2018-10-03 20:54:25 · 185 阅读 · 0 评论