
数据结构与算法
时光不语,静待花开
既然选择了远方,便只顾风雨兼程
展开
-
算法:替换空格
题目:请实现一个函数,将一个字符串中的每个空格替换成 “%20” 。例如,当字符串为 We Are Happy 。则经过替换之后的字符串为 We%20Are%20Happy 。解法:1、replaceAll public static String replace(String str, String beforeStr, String replacement) { String string = str.replaceAll(beforeStr, repla..原创 2020-08-27 10:45:41 · 327 阅读 · 0 评论 -
【转】算法的时间复杂度和空间复杂度详解
通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法执...转载 2019-06-06 10:30:44 · 412 阅读 · 0 评论 -
堆——神奇的优先队列(上) 【经典】
堆——神奇的优先队列(上) 【经典】堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆。那这一特性究竟有什么用呢? ...转载 2019-06-19 10:40:10 · 247 阅读 · 0 评论 -
堆——神奇的优先队列(下) 【经典】
堆——神奇的优先队列(下) 【经典】接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。 1 2 3 4 5 6 7 n=0; ...转载 2019-06-19 10:41:48 · 211 阅读 · 0 评论 -
栈详解及java实现
栈详解及java实现目录 导读 目录 概念 特点 存储结构 java实现 顺序栈的实现 链式栈的实现 栈的应用 十进制转换为N进制 校验括号是否匹配导读 栈和队列是有操作限制的线性表。1、栈(stack)与堆(heap)都是java用来在内存中存放数据的地方。2、java自动管理栈堆,程序员不需要理会(与C++不同)。3、栈...转载 2019-06-17 11:11:19 · 360 阅读 · 0 评论 -
再来聊一聊「动态规划」
动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的。实际上,动态规划是一种常见的「算法...转载 2019-07-09 14:54:10 · 257 阅读 · 0 评论