1.1
实现一个算法,确定一个字符串的所有字符是否全都不同。不允许使用额外的数据结构。解答:这里假定字符集为ASCII码,可以与面试官沟通确认字符串使用的字符集。由于字符集是有限的,建立一个数组模拟的Hash表记录每个字符是否出现,线性扫描一次字符串即可,复杂度O(len(s)).如果字符集较大,需...
分类:
编程语言 时间:
2014-05-24 04:11:56
阅读次数:
350
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1).例如:输入{2,7,3,10,3,2,5,5}
, 输出 7 和 10 。大家首先想到的是顺序扫描法,但是这种方法的时间复杂度是O(n2)。接着大家又会考虑用哈希表的...
分类:
其他好文 时间:
2014-05-24 01:10:20
阅读次数:
286
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。GOF在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(Abstraction...
分类:
其他好文 时间:
2014-05-23 10:24:20
阅读次数:
311
一、算法思想描述 归并排序:先递归分解序列,然后在合并有序序列。其过程描述如下:每次输出A、B这两个有序序列中的最小的一个。 二、算法分析 时间复杂度:最差、平均、最好的时间复杂度都是O(nlgn); 空间复杂度:O(n) 稳定性: 稳定三、算法实现 /*
* mergesort.cpp
*
* Created on: 2014年5月18日...
分类:
其他好文 时间:
2014-05-22 07:29:44
阅读次数:
250
给定一个向量,其中的每个元素代表了高度,比如height[3] = 5,说明在坐标轴中在点3处存在高度为5的竖线,这样所有的元素就形成一个琴状的形状,最后要求的就是两条竖线之间的矩形形状最大的面积。最直觉的做法就是穷举,这样的复杂度是O(n2),显然还有更合适的方法,因为在这样的方法中有很多确定要小的面积也进行了计算。关于面积有两个变量,一个是横轴之间的距离,;另一个是两条竖轴之间的距离。我们可以固定其中一个变量,很显然,我们可以先取最远的两条竖线进行比较,然后使两个辅助指针逐渐缩小,取两个辅助指针中的较小...
分类:
其他好文 时间:
2014-05-20 15:44:28
阅读次数:
227
package merge;
import javax.lang.model.element.Element;
/**
* 归并排序:
* 归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共需要logN步,每步都是一个合并有序数列的过程,时间复杂度为O(N),故一共为
* O(NlogN).
* @author AbuGe
*
*/
public class Merge...
分类:
其他好文 时间:
2014-05-20 14:40:39
阅读次数:
320
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。菜鸟的写法是顺序扫描,时间复杂度是O(n2)。下面给出一种大牛的写法,时间复杂度只需O(n)。
分类:
其他好文 时间:
2014-05-20 08:19:22
阅读次数:
285
二叉树中任意左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。两种解法。第一种:菜鸟的解法,出现重复遍历,时间复杂度高。第二种:大神的解法,只遍历一次,高端大气上档次。
分类:
其他好文 时间:
2014-05-19 13:47:09
阅读次数:
244
#includeusing namespace std;bool solver(const int
a[],const int n, int & num){ if(NULL == a || 0>= n) return false;
////注意,是小写~ int count = 0; ...
分类:
其他好文 时间:
2014-05-19 12:11:20
阅读次数:
335
出题:输入一个已经升序排序的数组和一个数字;要求在数组中查找两个数,这两个数的和正好等于输入的那个数字,输出任意一对数字就可以,要求时间复杂度是O(n);分析:对于升序排序的数组{…i…j…k…m……},只有可能是i+m=j+k(j和k可能是同一个数),所以可以从两边往中间收缩而忽视其他交叉相加的情...
分类:
其他好文 时间:
2014-05-19 12:04:14
阅读次数:
357