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

1

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

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

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

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

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

SAMPLE INPUT
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)

Я не понимаю, почему, если условие не работает в течение цикла

Теги:
arrays
python-3.x
algorithm
linear-search

3 ответа

2

Чтобы найти LAST-позицию, вы можете выполнить поиск BACKWARDS и остановить FIRST-хит:

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)
  • 0
    Это лучший ответ, так как в среднем будет достаточно N / 2 сравнений (при условии равномерного распределения) по сравнению с N при движении вперед.
0
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)
0

Это работает

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню