Java面试题——数组求和统计

牛牛有两个长度为nn的数组a, ba,b,牛牛希望统计有多少数对(l, r)(l,r)满足:

1,0<=l<=r<=n-1

2,sum_{i= l}^{r}{a_i} = b_l + b_r∑i=lra**i=b**l+b**r

示例1

输入

[1,2,3,4],[2,1,4,5]

输出

4

说明

满足条件的数对有(0, 1), (0, 2), (1, 1), (1, 2)(0,1),(0,2),(1,1),(1,2)

示例2

输入

[0,0,1,1,1],[2,0,4,3,3]

输出

2

1,结题思路

不使用暴力破解,因为会超时!如果想更快的解决这个问题,需要对于问题进行转换;主要是这个公式:
图片说明
这个公式比较难求解在具有两个变量:l与r,双份变量,双份难度!因此最好整成一个变量,那怎么办?举个例子

要求解 1+2+3+4+5+6  中第三个数字3到最后一个数字6之间的和可以怎么求?
(1+2+3+4+5+6) - (1+2+3) + 3
有人说,那这样不是很繁琐???对的,但是这样我们发现公式中的变量只剩下一个,即r或者l,怎么说
我们令S(i)表示数组A从0->i位置上的所有数据的和,则:
s(6) = (1+2+3+4+5+6)
S(3) = (1+2+3)
原来的式子就可以表示为:
S(6) - S(3) + A[3]
因此,我们只需要考虑如何求解S中的每个值即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值