- 博客(6)
- 收藏
- 关注
原创 空格替换
题目: 请实现一个函数,把字符串中的每一个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.” 看到这道题目,我们最开始的思路肯定是从头到尾扫描字符串,遇到空格就将它与%20相替换。但是由于是一个字符替换成3个字符,那么我们就必须将空格后面所有的字符都后移2个字节,如此算来,时间复杂度会是n^2。 如何减少时间复杂度
2016-10-03 17:08:15
284
原创 C++常见面试基础
定义一个空的类型,里面没有任何成员变量和成员函数。对该类型求sizeof,得到的结果是多少? 答:答案是1。因为空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例,至于占用多少内存,有编译器决定,vs中每个空类型的实例占用1字节的空间。 如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof,得
2016-10-02 14:50:56
239
原创 基于快排的选择算法:返回数组中第k小的数
快速排序的随机化版本 我们上篇对快排继续了讨论,我们知道它的平均性能是nlgn,但是我们分析的前提是:输入数据的所有排列都是等概率的。但是在实际的工程中,这个假设并不会总是成立,当面对大数据输入的快排时,我们所分析的平均性能不能实现,所以,我们只能通过显性的对输入数据进行重新排列,来使得算法实现的随机化。 基于随机化的快排: int randomized_partition(int *
2016-09-22 20:11:53
504
原创 以空间换时间的计数排序
计数排序 我们前面学习的插入、归并、堆和快速排序都是比较排序,即在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们说过比较排序有时间下界,即nlgn,如果我们需要一个时间复杂度为O(n)的排序算法,要怎么办? 计数排序就是比较好的选择。计数排序的基本思想是:对每一个输入的元素x,确定小于x的元素个数。利用这一信息可以直接把x放到它的输出数组中的位置上。 这就要求我们需要
2016-09-18 10:22:37
889
原创 比较排序之堆排序和快速排序
堆排序 堆是一个数组,它可以被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素。除了最底层外,改树是完全充满的,而且是从左往右填充的。 堆可以分成两种形式:最大堆和最小堆。 在堆排序算法中,我们使用的是最大堆。最小堆一般用于构建优先队列。 我们知道,在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足: A[parent(i)]>=A[i]
2016-09-17 22:24:37
709
原创 比较排序之插入和归并排序
排序之插入和归并插入排序: 对于少量的元素的排序,插入排序是一个很有效的算法。其原理很简单,类似于我们打扑克的时候,开始时,我们左手为空并且桌上的牌面向下,然后,我们每次从桌子上拿走一张牌并将它插入左手的正确位置,为了找到正确位置,我们从右往左将它与每张牌进行比较。 对于数组来说,我们就是从第二个元素开始,在该元素左边建立一个排好序的子数组,然后对右边的元素进行依次遍历,将它们插入到左
2016-09-17 21:01:12
2386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人