Линейный поиск по указанному массиву, чтобы получить требуемый индекс элемента
Я кодировал для линейного поиска в Python3, но я не получаю требуемый вывод. Ниже проблема:
Вам дан массив размером N, состоящий из целых чисел. Кроме того, вы получили элемент М, который вам нужно найти и
выведите индекс последнего вхождения этого элемента M в массив, если он существует в нем, в противном случае выведите -1. Считайте, что этот массив 1 проиндексирован.
Формат ввода: первая строка состоит из 2 целых чисел N и M, обозначающих размер массива и элемент для поиска в массиве соответственно.
Следующая строка содержит N разделенных пробелом целых чисел, обозначающих элементы массива. Формат вывода Выведите единственное целое число, обозначающее индекс последнего вхождения целого числа M в массив, если оно существует, в противном случае выведите -1.
ОБРАЗЕЦ ВХОДА
5 11 2 3 4 1
ОБРАЗЕЦ ВЫХОДА
5
arr_len , num = input("Enter length & no to be search: ").split()
#num = int(input("Enter number to search: "))
list_of_elements = list(map(int, input("Enter array to search: ").split()))
found = False
for i in range(len(list_of_elements)):
temp = list_of_elements[i]
if(temp == num):
print('--IF cond working--')
found = True
print("%d found at %dth position"%(num,i+1))
break
if(found == False):
print("-1")
Проверьте здесь мой код ( https://ide.geeksforgeeks.org/FSYpglmfnz)
Я не понял, почему, если условие не работает внутри цикла
3 ответа
Чтобы найти ПОСЛЕДНЮЮ позицию, вы можете выполнить поиск НАЗАД и остановиться на первом ударе:
arr_len, num = 6, 1 # Test Data
list_of_elements = [1, 2, 3, 4, 1, 6] # Test Data
pos = -1 # initial pos (not found)
for i in range(arr_len, 0, -1): # 6,5,4,3,2,1
temp = list_of_elements[i-1] # adjust for 0-based index
if(temp == num):
pos = i # Store position where num is found
break
print(pos)
arr_len , num = input("Enter length & no to be search: ").split()
list_of_elements = list(map(int, input("Enter array to search: ").split()))
pos = -1 # initial pos (not found)
for i in range(0, int(arr_len)):
temp = list_of_elements[i]
if(temp == int(num)):
pos = i + 1 # Store latest position where num is found
print(pos)
Это работает
def find(digit, array):
if digit not in array:
return -1
return max([i for i, x in enumerate(array) if x == digit]) + 1
+1
в конце, как было сказано, считать массив 1 проиндексированным.