您的位置:首页 > 理论基础 > 数据结构算法

《面试》--数据结构常见题目分析

2017-08-15 10:39 357 查看

1 递归思想实例—斐波那契数列的实现

递归思想的核心是:要找到递归结束的条件。

相比较迭代,迭代是使用循环结构,而递归使用的是选择结构。

使用递归能够使得代码更清晰,更简洁,更容易让你理解,但是大量的递归将会建立大量的函数副本,会消耗大量的时间和内存,而迭代则不需要此种付出。

菲波那切数列常用实例

兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子,

假设所有的兔子都不会死,n月后会有多少只兔子。



因为第三个月的时候第一个月的兔子可以出生了,所以第一个月的兔子数是可生的兔子数,则第一个月加第二个月的兔子数就是总的第三个月的兔子数了。

原型 数组思维,将整体数列求出再取值。

def shulie(n):
l = [0,1]
for i in range(n):
l.append(l[i]+l[i+1])
print l

shulie(3)


递归思维,直接求得值。

def shulie(n):   # n >= 0
if n < 2:
if n ==0:
return 0
else:
return 1
else:
return shulie(n-1) + shulie(n-2)

print shulie(5)


2 递归和分治思想实例—汉诺塔问题

3 根针,一共64片金盘,每针要求大盘在下,小盘在上。

最原始是三个金盘可以从A借助B移动到C

那么4个呢,可以借助上面3个金盘的思路将3个金盘移动到 B, 那么最后一步就可以把A的最大盘移动到C ,再按照之前移动三个的思路将 B 上的三个金盘移动到C

那么 5个盘子呢 同理。所以可以使用递归的思想。

就是第一步:将 n-1层转移到 B上 需要 Hanoi(n-1) 步

第二步: 将第n层转移到C 上 需要 1 步

第三步: 将B上的n-1 层转移到 C 上,完成汉诺塔 需要Hanoi(n-1) 步

所以总步数 2 *(Hanoi(n-1)) + 1

def Hanoi(n):
if n == 1:
return 1
else:
return 2*Hanoi(n-1)+1
print Hanoi(64)


改进版,可输出具体的流程

def Hanoi(n,x,y,z):       # x 通过 y 到 z
if n == 1:
print "%s --> %s " % (x,z)
else:
Hanoi(n-1,x,z,y)      # x通过z到y;将x的前n-1层转移到y上
print "%s --> %s " % (x,z)   # 将最后一层从x转移到z
Hanoi(n-1,y,x,z)        # y通过x到z;将y上的所有转移到z
Hanoi(3,'x','y','z')


3 字符串 BF算法

核心:通过遍历原字符串索引,来匹配子串是否能和主串想匹配。

m = map(int,raw_input().split())
n = map(int,raw_input().split())

def Bf(m,n):
i , j = 0 ,0
while i <= len(m)-len(n):
if m[i] == n[j]:
j = j+1
else:
j = 0
i = i+1
if j >=len(n):
break
return [i-len(n)+1,i]
print Bf(m,n)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 面试