Линейный поиск по указанному массиву, чтобы получить требуемый индекс элемента

Я кодировал для линейного поиска в Python3, но я не получаю требуемый вывод. Ниже проблема:

Вам дан массив размером N, состоящий из целых чисел. Кроме того, вы получили элемент М, который вам нужно найти и

выведите индекс последнего вхождения этого элемента M в массив, если он существует в нем, в противном случае выведите -1. Считайте, что этот массив 1 проиндексирован.

Формат ввода: первая строка состоит из 2 целых чисел N и M, обозначающих размер массива и элемент для поиска в массиве соответственно.

Следующая строка содержит N разделенных пробелом целых чисел, обозначающих элементы массива. Формат вывода Выведите единственное целое число, обозначающее индекс последнего вхождения целого числа M в массив, если оно существует, в противном случае выведите -1.

ОБРАЗЕЦ ВХОДА
5 1

1 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 проиндексированным.

Другие вопросы по тегам