求教一下,阿里8.17笔试完美对

思路是统计每行中的每个元素与最后一个元素相减,减的值存到新数组,用tuple做哈希,遍历哈希,如果一个tuple的相反tuple在里面,就加对应的两个value相乘(tuple的value与-tuple的value),最后结果除2。用例过了,可提交就变0
实在不知道哪里错了  求大佬们帮忙看看
def result(a):
    n=len(a)
    k=len(a[0])
    b=[[0 for i in range(k-1)]for j in range(n)]
    for i in range(n):
        for j in range(k-1):
            b[i][j]=a[i][j]-a[i][k-1]
    d=[]
    for i in b:
        d.append(tuple(i))
    s={}
    for i in d:
        if i in s:s[i]+=1
        else:s[i]=1
    count=0
    for i in s:
        if reverse(i) in s:
            count+=s[reverse(i)]*s[i]
    return count // 2
def reverse(t:tuple)->tuple:#返回tuple的相反数
    l=list(t)
    for i in range(len(l)):
        l[i]=-l[i]
    return tuple(l)

str1 = input()
strs = str1.split()
n, m = int(strs[0]), int(strs[1])
a = []
for _ in range(n):
    str_tmp = [int(i) for i in input().split()]
    a.append(str_tmp)
print(result(a))


#阿里笔试817##笔试题目##阿里巴巴#
全部评论
第七行应该是 b[i][j]=a[i][j+1]-a[i][j]
点赞 回复 分享
发布于 2020-08-17 22:45
t有2个,-t有3个的情况下,总共有6对,你这算了5*2*3/2=15对吧
点赞 回复 分享
发布于 2020-08-18 01:37
考虑[2,-2,2,-2]的情况,实际会有四对(0,1),(1,2),(0,3),(2,3),你只统计了两对。应该在更新s的时候实时统计,而不是更新完了s再统计
点赞 回复 分享
发布于 2020-08-18 10:14
可以参照leetcode两数之和的思路。
点赞 回复 分享
发布于 2020-08-18 10:17

相关推荐

object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务