Я пытаюсь решить эту проблему:
Учитывая массив a, который содержит только числа в диапазоне от 1
до a.length
, найдите первый дубликат числа, для которого второе вхождение имеет минимальный индекс. Другими словами, если имеется более 1 дублированного числа, вернуть номер, для которого второе вхождение имеет меньший индекс, чем второе вхождение другого числа. Если таких элементов нет, return -1
.
Пример
Для a = [2, 1, 3, 5, 3, 2]
вывод должен быть
firstDuplicate(a) = 3
.
Есть 2 дубликата: числа 2 и 3. Второе вхождение 3 имеет меньший индекс, чем второе вхождение 2, поэтому ответ равен 3.
Для a = [2, 4, 3, 5, 1]
вывод должен быть
firstDuplicate(a) = -1
.
Input/Output
[execution time limit] 4 seconds (py3)
[input] array.integer a
Guaranteed constraints:
1 ≤ a.length ≤ 105,
1 ≤ a[i] ≤ a.length.
[output] integer
Элемент в, который встречается в массиве более одного раза и имеет минимальный индекс для своего второго вхождения. Если таких элементов нет, вернуть -1.
это мой код:
import math
def firstDuplicate(a):
set1=set()
set2=set()
set1=[a]
z = len(a)
y=z/2
if y%2==0:
set2 =[a[0:y]]
else:
set2 = [a[0:int(y)+1]]
c = 0
c = intersection(a,b)
if c == 0 :
return -1
else:
if set2[1] > set2[0]:
return set2[1]
else:
return set2[0]
a=[2, 3, 3, 1, 5, 2]
firstDuplicate(a)
выдает ошибку, что не найдена такая функция, называемая пересечением.