一些面试题

 1,设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)

 

技巧型,设置一个辅助栈,push的时候,把当前最小值压栈.

 

2,一串首尾相连的珠子(m个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。

并分析时间复杂度与空间复杂度。

 

跟编程之美上"最小摘要"问题有点像,不过这里是首位相连的,所以设置两端重复的原序列,空间复杂度为O(2m);

设置两个指针,front,tail,开始都指向第一个位置;设置所有颜色的计数器;设置最短长度minLen;

1)front向后遍历,并增加相应计数器值,直到所有颜色计数器都大于等于1,根据front和tail距离更新minLen;

2)更新minLen之后,tail向后遍历,并减小相应计数器值,直到某一个颜色计数器为0(否则,也应该更新一下minLen,即--minLen);此时继续1)过程;

如此两指针遍历一次即可完成.

 

 

你可能感兴趣的:(算法)