查看: 2297|回复: 6
收起左侧

google : 最小窗口问题

|只看干货 |刷题
头像被屏蔽

分享帖子到朋友圈
wwwyhx | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

上一篇:Amazon : 最大递增子序列
下一篇:Google : 两个排序数组中求第k大的sum(a+b)
darksteel 2011-5-8 02:14:12 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (32)
 
 
0% (0)    👎
本帖最后由 darksteel 于 2011-5-8 02:39 编辑

朴素的办法是O(n^2)的,昨天想了半天,觉得应该能做到O(kn)。假设数组是a和q。
dp[n][k]: dp[j]表示从a开始,包含q[j...k]的最小窗口的长度。初只全部设为INF。
for i = 1 to n
  if a(i) == q[k]
    dp(i)[k] = 1;
for i = k-1 to 1
  p = -1;
  for j = n to 1
    if a[j] == q && p >= 0
      dp[j](i) = dp[p][i+1] + p - j;
    if a[j] == q[i+1]  p = j;
最后答案是dp(i)[1]之中最小的那个。
以上伪代码可能有漏洞,但大体思路是这样。假设某个位置a(i)的值等于q[1],要找严格从这个位置开始的最小窗口,我们总是可以用贪心的策略,找到第一个q[2]就继续找q3],然后找到第一个q[3]就开始找q[4],这样应该是没错的,跳过某个不会使解更优。所以每次内层循环我们只要维护一个离当前最近的q[i+1]的位置,直到找到一个q(i),然后可以直接通过dp[p][i+1]得出dp[j](i)。细节还有可以简化的地方,空间好像也能优化到O(n),就是不知道这个想法有没有漏洞,希望大家指出~
回复

使用道具 举报

lambda2fei 2012-9-5 10:43:14 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (1)
 
 
0% (0)    👎
不就扫一次那个input array,然后令i=0,每找到一个query[i]就令i++?看最后i是不是等于k
回复

使用道具 举报

CStick75 2012-9-6 11:01:33 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (1)
 
 
0% (0)    👎
本帖最后由 CStick75 于 2012-9-6 11:13 编辑
lambda2fei 发表于 2012-9-5 10:43
不就扫一次那个input array,然后令i=0,每找到一个query就令i++?看最后i是不是等于k

这个不对吧,这个只判断了query是不是input的子序列,但是并没有给出一个子序列使得它在input里面最小啊 = - =
比如说 1 1 1 2 2 2 3 3 3 我query 1 2 3,如果这么做得到的结果应该是 [1 1 1 2 2 2 3 ]吧,但是我觉得楼主的意思应该是[1 2 2 2 3]
这个要是不考虑性能O(mn^2)的DP是可以的啊,不过我觉得人家的意思应该是给一个在线算法,预处理+快速查询………… 不过这样的东西还没想到啊
本来看成RMQ了………………
回复

使用道具 举报

lambda2fei 2012-9-9 14:54:37 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (1)
 
 
0% (0)    👎
CStick75 发表于 2012-9-6 11:01
这个不对吧,这个只判断了query是不是input的子序列,但是并没有给出一个子序列使得它在input里面最小啊  ...

说漏了一步,就是每找到一个合适的包含了所有query的window,前面的指针就往后跳直到窗口最小。
回复

使用道具 举报

lambda2fei 2012-9-9 14:58:28 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (1)
 
 
0% (0)    👎
CStick75 发表于 2012-9-6 11:01
这个不对吧,这个只判断了query是不是input的子序列,但是并没有给出一个子序列使得它在input里面最小啊  ...

所以只需O(n)。在线的意思是什么呢?input array固定,然动态给query array然后实时找出最小window?这样貌似rmq线段树啥的还是不行吧,还是得O(n)吧。。。
回复

使用道具 举报

头像被屏蔽
keagle1223 2012-9-23 00:39:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://tools.1point3acres.com/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

>
快速回复 返回顶部 返回列表