#python
Вопрос:
Я попытаюсь найти элементы из 2d-массива, в котором элементы каждой строки отсортированы. Я использую цикл for для доступа к строке, а затем применяю двоичный поиск в каждой строке. Но для цикла застрять в строке 1.
def searchMatrix(self, matrix, target) -> bool:
m = len(matrix)
print(m)
for i in range(m):
print(i)
if len(matrix[i]) == 1:
if matrix[i][0] == target:
return True
else:
return False
else:
start = 0;
end = len(matrix[0]) - 1
while start <= end :
mid = round((start end)/2)
if(matrix[i][mid] == target):
return True
elif matrix[i][mid] > target:
end = mid - 1
elif matrix[i][mid] < target:
start = start 1
return False
Мой вывод:
3
0
но результат должен быть
3 0 1 2
Комментарии:
1. Вы всегда возвращаете что-то на первой итерации, поэтому цикл существует на первой итерации.
Ответ №1:
Внутри вашего цикла все условия приведут к return
оператору, поэтому функция завершится на первой итерации. Вы можете удалить все return False
и просто добавить одно в качестве последнего оператора вашей функции:
def searchMatrix(self, matrix, target) -> bool:
m = len(matrix)
print(m)
for i in range(m):
print(i)
if len(matrix[i]) == 1:
if matrix[i][0] == target:
# Only exit the function if you find the target
return True
else:
start = 0;
end = len(matrix[0]) - 1
while start <= end :
mid = round((start end)/2)
if(matrix[i][mid] == target):
# Only exit the function if you find the target
return True
elif matrix[i][mid] > target:
end = mid - 1
elif matrix[i][mid] < target:
start = start 1
# Otherwise, keep iterating
# Since all rows were searched, exit the function
return False