自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 空格替换

题目: 请实现一个函数,把字符串中的每一个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.” 看到这道题目,我们最开始的思路肯定是从头到尾扫描字符串,遇到空格就将它与%20相替换。但是由于是一个字符替换成3个字符,那么我们就必须将空格后面所有的字符都后移2个字节,如此算来,时间复杂度会是n^2。 如何减少时间复杂度

2016-10-03 17:08:15 255

原创 C++常见面试基础

定义一个空的类型,里面没有任何成员变量和成员函数。对该类型求sizeof,得到的结果是多少? 答:答案是1。因为空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例,至于占用多少内存,有编译器决定,vs中每个空类型的实例占用1字节的空间。 如果在该类型中添加一个构造函数和析构函数,再对该类型求sizeof,得

2016-10-02 14:50:56 211

原创 基于快排的选择算法:返回数组中第k小的数

快速排序的随机化版本 我们上篇对快排继续了讨论,我们知道它的平均性能是nlgn,但是我们分析的前提是:输入数据的所有排列都是等概率的。但是在实际的工程中,这个假设并不会总是成立,当面对大数据输入的快排时,我们所分析的平均性能不能实现,所以,我们只能通过显性的对输入数据进行重新排列,来使得算法实现的随机化。 基于随机化的快排: int randomized_partition(int *

2016-09-22 20:11:53 469

原创 以空间换时间的计数排序

计数排序 我们前面学习的插入、归并、堆和快速排序都是比较排序,即在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们说过比较排序有时间下界,即nlgn,如果我们需要一个时间复杂度为O(n)的排序算法,要怎么办? 计数排序就是比较好的选择。计数排序的基本思想是:对每一个输入的元素x,确定小于x的元素个数。利用这一信息可以直接把x放到它的输出数组中的位置上。 这就要求我们需要

2016-09-18 10:22:37 854

原创 比较排序之堆排序和快速排序

堆排序 堆是一个数组,它可以被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素。除了最底层外,改树是完全充满的,而且是从左往右填充的。 堆可以分成两种形式:最大堆和最小堆。 在堆排序算法中,我们使用的是最大堆。最小堆一般用于构建优先队列。 我们知道,在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足: A[parent(i)]>=A[i]

2016-09-17 22:24:37 658

原创 比较排序之插入和归并排序

排序之插入和归并插入排序: 对于少量的元素的排序,插入排序是一个很有效的算法。其原理很简单,类似于我们打扑克的时候,开始时,我们左手为空并且桌上的牌面向下,然后,我们每次从桌子上拿走一张牌并将它插入左手的正确位置,为了找到正确位置,我们从右往左将它与每张牌进行比较。 对于数组来说,我们就是从第二个元素开始,在该元素左边建立一个排好序的子数组,然后对右边的元素进行依次遍历,将它们插入到左

2016-09-17 21:01:12 2329

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除