今日面试题:直线上最多点数;及子序列数目分析
来源:互联网 发布:杭创软件 地址 编辑:程序博客网 时间:2024/04/30 10:07
转载于:http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5ODIzNDQ3Mw==&appmsgid=10000440&itemidx=1&sign=50e45958445bc594e2714aed84d2ef07#wechat_redirect
今日面试题:直线上最多点数
平面上有n个点,某些点会出现在同一条直线上,请给出方法找到在同一条直线上点最多的情况,给出数目即可。
===============================
子序列数目分析
原题
给定两个字符串s和t(len(s)>len(t)),t可能是s的一个子序列。求所有s的子序列集合中,有多少个子序列等于t。例如s="abbbc",t="abc",结果为3,即在s的所有子序列集合中,有3个子序列为t。
分析
给定两个字符串s和t(len(s)>len(t)),t可能是s的一个子序列。求所有s的子序列集合中,有多少个子序列等于t。例如s="abbbc",t="abc",结果为3,即在s的所有子序列集合中,有3个子序列为t。 分析: 对于这个题目,我们可以很直观的想到递归解法,如果当前t[i]==s[j],则f[i,j] = f[i+1, j+1] + f[i, j+1],否则f[i,j] = f[i, j+1]。但是用递归的方法会产生大量的重复计算,时间复杂度很高。如何能减少重复计算呢,相信大家都能想到动态规划。仔细推敲一下是否能得到一个动态规划的递推公式。当t[i]==s[j]时,我们可以用当前的s[j]来匹配t[i],那么f[i,j]就依赖于f[i-1, j-1],同时,我们也可以不用当前的s[j]来匹配t[i],那么f[i,j]依赖于f[i,j-1],因此我们可以得到递推公式如下: if(t[i]==s[j]) f[i,j] = f[i-1][j-1] + f[i][j-1] else f[i,j] = f[i][j-1] 时间复杂度o(m*n),m和n分别是字符串s和t的长度。与这种题目类似的还有编辑距离问题,某个字符串是否是另外两个字符串的interleaving问题,这一类题目都是与字符串相关的动态规划问题,大家可以总结一下思路,下次遇到类似的相信很快就会得到解决方案。 代码如下:
【分析完毕】
===============================
- 今日面试题:直线上最多点数;及子序列数目分析
- 今日面试题:子序列数目;及数组墙分析
- java 平面上在一条直线上最多的点数
- UVA Lining Up (一条直线上最多的点数)
- POJ2606&1118 同直线最多点数
- POJ 1118+2606+2780 (求平面上同一条直线的最多点数)
- 寻找平面内共线点数最多的直线和点数
- POJ 1118+2606+2780(同一直线上点最多的数目)
- 字符串子序列数目
- 面试题之子序列分析
- 【面试题】打印最长升序子序列
- 经典面试题:最长公共子序列
- 今日面试题
- 面试题43:n个骰(tou)子的点数
- 【面试】Liveramp 面试题 面经 子序列问题
- 数轴上覆盖最多点的数目
- 面试题43:骰子的点数
- 面试题:在9个点上画十条直线,每条直线上至少三个点
- hadoop权威指南中的ncdc数据下载地址及命令
- 关于Field类的getDeclaredFields和getField两方法
- applicationContext 中 xmlns 与 xsi:schemaLocation 含义
- redis 学习笔记
- 音频播放根据距离选择话筒模式
- 今日面试题:直线上最多点数;及子序列数目分析
- CALayer属性
- windows下用golang连接mssql
- 一些问题解答
- sql server cpu及io 开销比较大的脚本的查询
- Android自定义用户数据
- 以追加方式写入文件的几种方法
- 用户禁止cookie以后,如何继续使用session
- jquery选择器类型