zoukankan      html  css  js  c++  java
  • 2019.8.9刷题统计

    第一题(未通过):1128

    这道题字符串的长度为1000000000,所以时间复杂度应该在log(n)级别,但我写出来了一个比O(l)还要大的复杂度,自然没通过。

    但是这道题我也想不出复杂度更低的算法了。。。

    第二题:1129

    这道题最朴素的算法就是每轮都计算前i位和后i位的hash值,时间复杂度为O(n2*数据数量)。针对这道题的数据,是1011以上级别的复杂度。

    可以加一个优化:由于主串不变,所以每轮只需要计算第i位的hash值,时间复杂度O(n*数据数量),低于107

    另外一个问题是:如何求后缀的hash值?

    先推导:设f[i]为长度为i的后缀的hash值,st为字符串,l为st的长度则

    f[1]=st[l-1]

    f[2]=st[l-1]+st[l-2]P

    f[3]=st[l-1]+st[l-2]P+st[l-3]P2

    f[4]=st[l-1]+st[l-2]P+st[l-3]P2+st[l-4]P3

    ……

    可以看出,每个f[i]的内容都等于f[i-1]的内容加上st[l-i]Pi-1。而Pi-1则可以在第i次循环中计算(即每个循环中P的值*=进制,i=1时除外)。

    思路清楚以后,这道题就很简单了。

    AC代码:

  • 相关阅读:
    d3.js了解
    java常用验证码
    连接数据库的配置文件
    MD5加密的使用
    ssm下载文件
    Ajax基于rest风格上传图片
    web常见页面错误整理
    前后端一起用cookie来保存密码
    通用mapper插件
    ssm的maven依赖,直接复制可以使用
  • 原文地址:https://www.cnblogs.com/wangximing/p/11327841.html
Copyright © 2011-2022 走看看