求解 Python 面试题:

2017-07-11 13:46:07 +08:00
 sunhk25

求解 python 面试题:

def solution(A):
    N = len(A)
    result = 0
    for i in xrange(N):
        for j in xrange(N):
            if A[i] == A[j]:
                result = max(result, abs(i - j))
    return result

当数组极大时,效率不好,求如何改??!!

1672 次点击
所在节点    问与答
9 条回复
mb4555
2017-07-11 13:51:44 +08:00
先排序,然后取头尾两元素差绝对值
GtDzx
2017-07-11 13:53:28 +08:00
实际上就只找 A[]中距离最远的一对相等的数。
对于每一个值 X,用 dict ( hashmap )记录最左边的 X 位置。
然后在从左到右扫描 A[]的过程中,利用 dict 直接更新距离。
mb4555
2017-07-11 13:55:19 +08:00
搞错了,好尴尬啊
junwuhui
2017-07-11 14:11:45 +08:00
对值进行 hash,拉链,然后每个链遍历一次?
geelaw
2017-07-11 14:14:24 +08:00
为什么你要发两次?
sunhk25
2017-07-11 14:16:23 +08:00
@junwuhui 我也是这个想法,当重复率高的时候效率应该还可以
sunhk25
2017-07-11 14:17:31 +08:00
@geelaw 之前的节点选错了 ”配件”
wingkou
2017-07-11 14:21:57 +08:00
用一个 map 记录第一次出现的位置,顺扫一遍过程中更新最大距离就好了吧
wingkou
2017-07-11 14:24:58 +08:00
原来 @GtDzx 已经说过一样的了😳

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/374496

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX