avatar-decorate
获赞
5199
粉丝
214
关注
229
看过 TA
697
西昌学院
2011
golang
IP属地:河南
微信公众号:福大大架构师每日一题
私信
关注
2023-11-08:用go语言,字符串哈希原理和实现比如p = 233, 也就是课上说的选择的质数进制" 3 1 2 5 6 ..."0 1 2 3 4hash[0] = 3 * p的0次方hash[1] = 3 * p的1次方 + 1 * p的0次方hash[2] = 3 * p的2次方 + 1 * p的1次方 + 2 * p的0次方hash[3] = 3 * p的3次方 + 1 * p的2次方 + 2 * p的1次方 + 5 * p的0次方hash[4] = 3 * p的4次方 + 1 * p的3次方 + 2 * p的2次方 + 5 * p的1次方 + 6 * p的0次方次方是倒过来的,课上讲错了所以hash[i] = hash[i-1] * p + arr[i],这个方式就可以得到上面说的意思于是,你想得到子串"56"的哈希值子串"56"的哈希值 = hash[4] - hash[2]*p的2次方(就是子串"56"的长度次方)hash[4] = 3 * p的4次方 + 1 * p的3次方 + 2 * p的2次方 + 5 * p的1次方 + 6 * p的0次方hash[2] = 3 * p的2次方 + 1 * p的1次方 + 2 * p的0次方hash[2] * p的2次方 = 3 * p的4次方 + 1 * p的3次方 + 2 * p的2次方所以hash[4] - hash[2] * p的2次方 = 5 * p的1次方 + 6 * p的0次方这样就得到子串"56"的哈希值了抱歉,课上讲错了。应该是上面的方式。所以,子串s[l...r]的哈希值 = hash[r] - hash[l-1] * p的(r-l+1)次方也就是说,hash[l-1] * p的(r-l+1)次方,正好和hash[r]所代表的信息,前面对齐了减完之后,正好就是子串s[l...r]的哈希值。
2023.11.08 在牛客打卡919天!
0 点赞 评论 收藏
分享
2023-10-25:假如某公司目前推出了N个在售的金融产品(1<=N<=100)对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1<=i<=N)现给出K(1<=K<=N)个方案,通过这些方案,能够支持将多个不同的产品进行整合(也可以对单个产品进行优化)形成新的产品。新的产品形成后,若用户持有了组成新产品所需的全部的原产品份额,则能够将用户持有的原产品份额转换为新产品的份额,各原产品份额与新产品份额比例均为1:1我们保证对于每个产品最多存在一个方案使用旧产品整合成该产品并且根据方案产出的新产品的产品编号均大于各旧产品的产品编号现计划根据这些方案,帮助部分愿意升级到最新产品的用户对产品进行升级请协助工作人员计算当前用户能够转换出的最新产品份额的最大值输入描述第一行包含整数N,第二行包含N个整数ai,第三行包含整数K接下来的K行,每一行代表一个方案,每一行包含整数1和M(M>=1)L为该方案产生的新产品的编号,M代表方案所需原产品个数接下来的M个整数代表了该方案所需的每个原产品的个数输出描述根据日前的份额和给出的方案,经过若干次转换,输出当前用户能够得到产品N的份额最大值举例输入:52 0 0 1 035 2 3 42 1 13 1 2输出:1解释:第一步将1份1产品转化为1份2产品第二步将1份2产品转化为1份3产品第三步将1份3产品和1份4产品,转成为1份5产品然后不能得到更多的5产品了,所以返回1实在是太困惑了,上文说的意思可谓不做人,那么我们改写一下意思,变得好理解如下是改写后的题目描述给定一个数组arr,长度为n,产品编号从0~n-1arr[i]代表初始时i号产品有多少份存在一系列的产品转化方案的数组convert,长度为k,代表k个方案比如具体某一个方案,convert[j] = {a, b, c, d, ...}表示当前的j号方案转化出来的产品是a,转化1份a需要:1份b、1份c、1份d...其中a、b、c、d...一定都在0~n-1范围内
2023.10.25 在牛客打卡916天!
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务