《面试》--数据结构常见题目分析
来源:互联网 发布:js中的观察者模式 编辑:程序博客网 时间:2024/05/13 23:23
1 递归思想实例—斐波那契数列的实现
递归思想的核心是:要找到递归结束的条件。
相比较迭代,迭代是使用循环结构,而递归使用的是选择结构。
使用递归能够使得代码更清晰,更简洁,更容易让你理解,但是大量的递归将会建立大量的函数副本,会消耗大量的时间和内存,而迭代则不需要此种付出。
菲波那切数列常用实例
兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子,
假设所有的兔子都不会死,n月后会有多少只兔子。
因为第三个月的时候第一个月的兔子可以出生了,所以第一个月的兔子数是可生的兔子数,则第一个月加第二个月的兔子数就是总的第三个月的兔子数了。
原型 数组思维,将整体数列求出再取值。
def shulie(n): l = [0,1] for i in range(n): l.append(l[i]+l[i+1]) print l[n]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)+1print 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上的所有转移到zHanoi(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)
阅读全文
0 0
- 《面试》--数据结构常见题目分析
- 常见数据结构面试题目(一)
- 常见数据结构面试题目(二)
- 常见数据结构面试题目(三)
- 常见数据结构面试题目(四)
- Java常见面试题目
- 常见笔试/面试题目
- 常见面试题目1
- 常见面试题目2
- 常见面试题目3
- 常见面试题目4
- 常见面试题目5
- 常见面试题目6
- Java面试常见题目
- sql常见面试题目
- Shell常见面试题目
- .NET面试常见题目
- 常见etl面试题目
- 算法小技巧
- ORA-12988: 无法删除属于 SYS 的表中的列
- lintcode -- 背包问题
- 笨小熊(南阳理工oj 题目62)
- Cookie与Session的区别与联系及生命周期
- 《面试》--数据结构常见题目分析
- [leetcode]133. Clone Graph@Java解题报告
- HDU
- kylin jdbc连接
- 关注回复图文,天气查询
- java数据结构与算法-高级排序-快速排序
- Java Spring 错误汇总
- 动态规划之01分数规划
- idea安装过程和设置