求解 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
当数组极大时,效率不好,求如何改??!!
1
mb4555 2017-07-11 13:51:44 +08:00
先排序,然后取头尾两元素差绝对值
|
2
GtDzx 2017-07-11 13:53:28 +08:00 2
实际上就只找 A[]中距离最远的一对相等的数。
对于每一个值 X,用 dict ( hashmap )记录最左边的 X 位置。 然后在从左到右扫描 A[]的过程中,利用 dict 直接更新距离。 |
3
mb4555 2017-07-11 13:55:19 +08:00
搞错了,好尴尬啊
|
4
junwuhui 2017-07-11 14:11:45 +08:00 via Android
对值进行 hash,拉链,然后每个链遍历一次?
|
5
geelaw 2017-07-11 14:14:24 +08:00
为什么你要发两次?
|
8
wingkou 2017-07-11 14:21:57 +08:00 via Android
用一个 map 记录第一次出现的位置,顺扫一遍过程中更新最大距离就好了吧
|