一 、二叉树遍历算法设计,涉及指针问题,暂不看
二 、设计包含min函数的栈:
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。
分析:这是去年google的一道面试题。
我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了。(排序不行)
在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。乍一看这样思路挺好的。但仔细一想,该思路存在一个重要的问题:如果当前最小元素被pop出去,如何才能得到下一个最小元素?(添加变量来记录也不行)
因此仅仅只添加一个成员变量存放最小元素(或最小元素的位置)是不够的。我们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到栈元素的类型可能是复杂的数据结构,用最小元素的位置将能减少空间消耗)push到辅助栈中;每次pop一个元素出栈的时候,同时pop辅助栈。(辅助栈,记录最小元素的存储位置)
三、求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一
个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
分析:本题最初为2005年浙江大学计算机系的考研题的最后一道程序设计题,在多表查询sql语句面试题2006年里包括google在内的很多知名公司都把本题当作面试题。由于本题在网络中广为流传,本题也顺利成为2006年程序员面试题中经典中的经典。
如果不考虑时间复杂度,我们可以枚举出所有子数组并求出他们的和。不过非常遗憾的是,由于长度为n的数组有O(n2)个子数组;而且求一个长度为n的数组的和的时间复杂度为O(n)。因此这种思路的时间是O(n3)。
很容易理解,当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。基于这样的思路,我们可以写出如下代码。
bool FindGreatestSumOfSubArray
(
int *pData, // an array
unsigned int nLength, // the length of array
int &nGreatestSum // the greatest sum of all sub-arrays
)
{
// if the input is invalid, return false
if((pData == NULL) || (nLength == 0))
return false;
int nCurSum = nGreatestSum = 0;
(
int *pData, // an array
unsigned int nLength, // the length of array
int &nGreatestSum // the greatest sum of all sub-arrays
)
{
// if the input is invalid, return false
if((pData == NULL) || (nLength == 0))
return false;
int nCurSum = nGreatestSum = 0;
/*逐个向后面加,如果出现了负数的和值,就抛弃,重新开始加
这样也有个问题,如果后面的是负数,加上了,但和依然是正数,则不能说就是最大值,
建议再定义一个数组,用来存放每次加后如果是正数的和值,用来最后判断一下取出最大值。然后再和数组中的每一个元素进行对比,如果的确是最大则取之*/
for(unsigned int i = 0; i < nLength; ++i)
{
nCurSum += pData[i];
// if the current sum is negative, discard it
if(nCurSum < 0)
nCurSum = 0;
// if a greater sum is found, update the greatest sum
if(nCurSum > nGreatestSum)
nGreatestSum = nCurSum;
for(unsigned int i = 0; i < nLength; ++i)
{
nCurSum += pData[i];
// if the current sum is negative, discard it
if(nCurSum < 0)
nCurSum = 0;
// if a greater sum is found, update the greatest sum
if(nCurSum > nGreatestSum)
nGreatestSum = nCurSum;
}
// if all data are negative, find the greatest element in the array
//输入有一类特殊情况需要特殊处理。当输入数组中所有整数都是负数时,子数组和的最大值就是数组中的最大元素。
if(nGreatestSum == 0)
{
nGreatestSum = pData[0];
for(unsigned int i = 1; i < nLength; ++i)
{
if(pData[i] > nGreatestSum)
nGreatestSum = pData[i];
}
}
return true;
}
四、查最小的k个元素
分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)。我们试着寻更快的解决思路。
另一种方法:定义一个长度为K的数组,每输入一个数字,存入之,直到存满,再次输入的时候,和数组里的数进行比较,如果有比它大的,就把那个最大的取出来,存入这个数,如果没有,则不存,直到N个数字输完,时间复杂可以降到O(n+nlogk)。通常情况下k要远小于n
五、百度文档
1、类成员有_2____种可访问形式?答:this.;new Class().Method;
2、在Asp中所有的自定义用户控件都必须继承自________?答:Control。
3、在.Net中所有可序列化的类都被标记为_____? 答:[serializable]
4、在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?答:GC。
3、在.Net中所有可序列化的类都被标记为_____? 答:[serializable]
4、在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?答:GC。
说明:如果程序中的内存不被程序员手动释放的话那么这个内存就不会被重新分配,直到电脑重起为止,也就是我们所说的内存泄漏。所说的这些是在非托管代码中,CLR通过AppDomain实现代码间的隔离避免了这些内存管理问题,也就是说一个AppDomain在一般情况下不能读/写另一AppDomain的内存。托管内存释放就由GC(Garbage Collector)来负责。
5、在.Net中,类System.Web.UI.Page 可以被继承么?答:可以。
6、的错误处理机制是什么?答:错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到到匹配的Catch为止。
5、在.Net中,类System.Web.UI.Page 可以被继承么?答:可以。
6、的错误处理机制是什么?答:错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到到匹配的Catch为止。
7、利用operator声明且仅声明了==,有什么错误么?答:要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="
7、某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:(1) 密码单词的最小长度是两个字母,可以相同,也可以不同(2) K不可能是单词的第一个字母(3) 如果L出现,则出现次数不止一次(4) M不能使最后一个也不能是倒数第二个字母(5) K出现,则N就一定出现(6) O如果是最后一个字母,则L一定出现问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?
A) K B)L C) M D) N
答案:B
问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
答案:A 分析:(2)(5)决定不能有K;(4)决定不能有M;故只能是LL
问题三:下列哪一个是单词密码?
A) KLLN (2)B) LOML(4) C) MLLO D)NMKO(6)
答案:C
8、C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
答:attribute:自定义属性的基类;property :类中的属性,说白了就是一对get-set方法
9、C#可否对内存进行直接的操作?答:在下,引用了垃圾回收(GC)功能,它替代了程序员,在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法
10、ADO.NET相对于ADO等主要有什么改进?
答案:A 分析:(2)(5)决定不能有K;(4)决定不能有M;故只能是LL
问题三:下列哪一个是单词密码?
A) KLLN (2)B) LOML(4) C) MLLO D)NMKO(6)
答案:C
8、C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
答:attribute:自定义属性的基类;property :类中的属性,说白了就是一对get-set方法
9、C#可否对内存进行直接的操作?答:在下,引用了垃圾回收(GC)功能,它替代了程序员,在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法
10、ADO.NET相对于ADO等主要有什么改进?
答:1:ado不依赖于ole db提供程序,而是使用托管提供的程序,
2:不使用com
3:不再支持动态游标和服务器端游标
4:,可以断开connection而保留当前数据集可用
5:支持强类型转换
2:不使用com
3:不再支持动态游标和服务器端游标
4:,可以断开connection而保留当前数据集可用
5:支持强类型转换
11、大概描述一下ASP.NET服务器控件的生命周期答:初始化加载视图状态处理回发数据加载-> 发送回发更改通知-->处理回发事件-->预呈现保存状态 呈现处置卸载(11步啊,天呢,想背死个人呢)
Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答:不能,可以实现接口
Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答:不能,可以实现接口
说明:C#3.0中的内部类定义:
var myVar = new
.g.|DzZ-M.cY{0
.g.|DzZ-M.cY{0
{ITPUB个人空间bs$x}l-If9H:]
field_string = “abcd”ITPUB个人空间+ZZ-Iw&K
field_int = 12;
r Ke8R;Y u,o/d+b0};ITPUB个人空间S,^0kn V+je
my.filed_string=“slkg”ITPUB个人空间;us)Bj!~8wY z
field_string = “abcd”ITPUB个人空间+ZZ-Iw&K
field_int = 12;
r Ke8R;Y u,o/d+b0};ITPUB个人空间S,^0kn V+je
my.filed_string=“slkg”ITPUB个人空间;us)Bj!~8wY z
12、Static Nested Class 和 Inner Class的不同,说得越多越好(貌似是Java的东西)
答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
13、&和&&的区别。答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
13、&和&&的区别。答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
14、<%# %> 和 <% %> 有什么区别?
答:<%# %>表示绑定的数据源,<% %>是服务器端代码块
答:<%# %>表示绑定的数据源,<% %>是服务器端代码块
15、重载与覆盖的区别?
答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。
2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3、覆盖要求参数列表相同;重载要求参数列表不同。
4、覆盖关系中,调用那个方法体,是根据对象的类型(对像对应存储空间类型)来决定;
重载关系,是根据调用时的实参表与形参表来选择方法体的。
16、什么是WSE?目前最新的版本是多少?
答:WSE (Web Service Extension)包来提供最新的WEB服务安全保证,最新版本2.0。
a=10,b=15,在不用第三方变量的前提下,把a,b的值互换答:a=a+b;b=a-b;a=a-b;还有变
答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。
2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
3、覆盖要求参数列表相同;重载要求参数列表不同。
4、覆盖关系中,调用那个方法体,是根据对象的类型(对像对应存储空间类型)来决定;
重载关系,是根据调用时的实参表与形参表来选择方法体的。
16、什么是WSE?目前最新的版本是多少?
答:WSE (Web Service Extension)包来提供最新的WEB服务安全保证,最新版本2.0。
a=10,b=15,在不用第三方变量的前提下,把a,b的值互换答:a=a+b;b=a-b;a=a-b;还有变
态要求,需要代码最短呢。
有两个结果:1) a^=b^(b^=a^b); // 13个字节2) a=b+(b=a)*0; //好经典的算法
17、请简述面向对象的多态的特性及意义!
答:面向对象的编程使用了派生继承 以及虚函数机制.一个本来指向基类的对象指针可以指向其派生类的.并访问从基类继承而来的成员变量和函数.而虚函数是专门为这个特性设计的,这个函数在每个基类的派生类中都是同一个名字,但函数体却并不一定相同,派生类往往为实现自己的功能而修改这个虚函数.这样用一个指针就能够实现对多种不同的派生类的访问, 并实现其派生类的特定功能(代码 )....
有两个结果:1) a^=b^(b^=a^b); // 13个字节2) a=b+(b=a)*0; //好经典的算法
17、请简述面向对象的多态的特性及意义!
答:面向对象的编程使用了派生继承 以及虚函数机制.一个本来指向基类的对象指针可以指向其派生类的.并访问从基类继承而来的成员变量和函数.而虚函数是专门为这个特性设计的,这个函数在每个基类的派生类中都是同一个名字,但函数体却并不一定相同,派生类往往为实现自己的功能而修改这个虚函数.这样用一个指针就能够实现对多种不同的派生类的访问, 并实现其派生类的特定功能(代码 )....
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论