python 获取行列号两个数组相等_从给定的两个数组中查找子数组,以便它们在Python中的总和相等...

假设我们有两个数组P和Q,它们的大小为N,它们的个数为1到N。我们必须从给定数组中找到子数组,以使它们具有相等的总和。最后返回这些子数组的索引。如果没有解决方案,则返回-1。

因此,如果输入像P = [2、3、4、5、6],Q = [9、3、2、6、5],则输出将是第一个数组中的索引:0、1、2以及第二个数组中的索引:0,所以P [0..2] = 2 + 3 + 4 = 9且Q [0] = 9。

为了解决这个问题,我们将遵循以下步骤-定义一个函数get_subarray()。这将需要P,Q,交换

N:= P的大小

index:=一个新映射

差:= 0,j:= 0

index [0]:=一对像(-1,-1)

对于0到N范围内的i,执行如果交换是正确的,那么

除此以外,

返回

idx:=索引[Q [j]-P [i]]

显示从idx [1] +1到j的所有值

显示从idx [0] +1到i的所有值

idx:=索引[Q [j]-P [i]]

显示P的从idx [0] +1到i的所有值

显示从idx [1] +1到j的所有值j:= j + 1

当Q [j]

差异:= Q [j]-P [i]

如果索引中存在差异,则

索引[差异]:=(i,j)

显示-1

从主要方面,执行以下操作-

使用它们的累计和更新P和Q

N:= P的大小

如果Q [N-1]> P [N-1],则get_subarray(P,Q,False)

除此以外,get_subarray(Q,P,True)

让我们看下面的实现以更好地理解-def show_res(x, y, num):

print("Indices of array", num, ":", end = " ")

for i in range(x, y):

print(i, end = ", ")

print(y)

def get_subarray(P, Q, swap):

N = len(P)

index = {}

difference, j = 0, 0

index[0] = (-1, -1)

for i in range(0, N):

while Q[j] 

j += 1

difference = Q[j] - P[i]

if difference in index:

if swap:

idx = index[Q[j] - P[i]]

show_res(idx[1] + 1, j, 1)

show_res(idx[0] + 1, i, 2)

else:

idx = index[Q[j] - P[i]]

show_res(idx[0] + 1, i, 1)

show_res(idx[1] + 1, j, 2)

return

index[difference] = (i, j)

print(-1)

def cumsum(arr):

n = len(arr)

for i in range(1, n):

arr[i] += arr[i - 1]

P = [2, 3, 4, 5, 6]

Q = [9, 3, 2, 6, 5]

cumsum(P)

cumsum(Q)

N = len(P)

if Q[N - 1] > P[N - 1]:

get_subarray(P, Q, False)

else:

get_subarray(Q, P, True)

输入项[2, 3, 4, 5, 6],[9, 3, 2, 6, 5]

输出结果Indices of array 1 : 0, 1, 2

Indices of array 2 : 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值