出题:将一个数组最开始的k个(K小于数组大小N)元素照搬到数组末尾,我们称之为数组的旋转;现在有一个已经排序的数组的一个旋转,要求输出旋转数组中的最小元素,且时间复杂度小于O(N);分析:时间复杂度小于O(N)也就是不能用常规的遍历思路;可以将数组看成两个都是递增序列(假设为升序)的子数组,并且前半...
分类:
其他好文 时间:
2014-05-27 00:40:17
阅读次数:
283
出题:要求用递归将一个栈结构的元素内外颠倒;分析:本题再次说明系统栈是程序员最好的帮手,但递归度较高所以时间复杂度较大,可以使用空间换时间的方法(额外数组保存栈元素,然后逆向压入);第一层递归(清空栈元素,并使用系统栈保存):[1,2,3,4,5],栈顶元素为1,将1弹出之后,递归处理[2,3,4,...
分类:
其他好文 时间:
2014-05-27 00:33:08
阅读次数:
445
出题:数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字;分析:解法1:首先对数组进行排序,时间复杂度为O(NlogN),由于有一个数字出现次数超过了数组的一半,所以如果二分数组的话,划分元素肯定就是这个数字;解法2:首先创建1/2数组大小的Hash
Table(哈希表可以替代排序时间,...
分类:
其他好文 时间:
2014-05-26 23:23:48
阅读次数:
453
排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法
对算法本身的速度要求很高。
而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面将给出详细的说明。《计算机程序设计技巧》(第三卷,排序和查找)对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个...
分类:
其他好文 时间:
2014-05-26 16:18:55
阅读次数:
304
有序容器:vector[连续内存]
拥有一段连续的地址空间,首地址不变,按顺序存放,拥有高效的随机存储和访问,毕竟有迭代器作为序号。
从尾部插入和删除很快,其他地方插入和删除操作的时间复杂度就高喽,需要大范围内存的复制粘贴,效率低下,就像数组一样.有空间预留的特点,操作起来消耗内存空间。capa.....
分类:
其他好文 时间:
2014-05-26 07:10:59
阅读次数:
244
参考文章来自objcio网站
为什么要编写轻量级的View Controller??
1、作为iOS项目中最大的文件,View
Controllers中的代码复用率几乎是最低的
2、重量级的View COntroller加大了测试的复杂度。
所以关注View
Controller的瘦身,把业务逻辑、网络请求、Views的代码移到合适的地方,进而提高代码可读性、降低耦合...
分类:
其他好文 时间:
2014-05-24 23:34:38
阅读次数:
427
排序(二)
以上排序算法都有一个性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们把这类排序算法称为比较排序。
任何比较排序的时间复杂度的下界是nlgn。
以下排序算法是用运算而不是比较来确定排序顺序的。因此下界nlgn对它们是不适用的。
键索引计数法(计数排序)
计数排序假设n个输入元素中的每一个都是在0到k区间的一个整数,其中k为某个整数...
分类:
其他好文 时间:
2014-05-24 20:26:16
阅读次数:
273
首先看看BZOJ 1040《修车》,如果没有做,请做完后再来看这道题。
我们惊喜地发现,这道题的题意跟 修车 基本一样。很可惜,数据范围。。。 我试了一下直接修改 修车
的代码,建成2+n+p*m个点,n*m*p条边的有向图,对其求费用流,时间复杂度O((2+n+p*m)^2*(n*m*p)...
分类:
其他好文 时间:
2014-05-24 12:40:47
阅读次数:
399
快速排序是笔试面试经常问到的一个排序。因此首先来复习快速排序。时间复杂度:O(n*lgn)
最坏:O(n^2) 空间复杂度:O(lgn),最坏O(n) 不稳定。
分类:
编程语言 时间:
2014-05-24 11:21:29
阅读次数:
326
快速排序如同其名,是排序中性能比较好的一个排序算法,当数组是顺序的话,他的最差的时间复杂度是O(N^2),一般的时间复杂度是O(n*lgn).
快速排序的思想就是分治,每一趟排序过程都把一个数放到最终的位置上面去。然后这个位置把数组分为前半部分和后半部分。针对前半部分和后半部分再递推进行快速排序。
快排的java实现:
public class Sort {
public stat...
分类:
其他好文 时间:
2014-05-23 01:44:26
阅读次数:
218