Проверьте, может ли какая-либо строка матрицы быть преобразована в элементы, присутствующие в целевой строке.

Опубликовано: 21 Сентября, 2022

Дана матрица mat[][] размерности N*M и массив target[] из M целых чисел. Задача состоит в том, чтобы проверить, можно ли любую строку матрицы сделать равной массиву target[] , выбрав любые две строки матрицу и обновить каждый элемент любой строки до максимума элементов с соответствующими индексами двух выбранных строк. Если это возможно, то выведите Yes . В противном случае выведите Нет .

Примеры:

Input: mat[][] = {{2, 5, 3}, {2, 8, 4}, {1, 5, 7}}, target[] = {2, 5, 7}
Output: Yes
Explanation:
After perform the given operation on row 3 and row 1 and modifying the row-3 becomes:
[max(1, 2), max(5, 5), max(7, 3)] = [2, 5, 7] which is equal to target

Input: mat[][] = {{3, 4, 5}, {4, 5, 6}}, target[] = {3, 2, 5}
Output: No

Подход: Данную проблему можно решить с помощью жадного подхода, идея состоит в том, чтобы создать вспомогательный массив comp[] и выполнить итерацию по каждой строке матрицы, а также если в строках есть элементы, меньшие или равные соответствующим элементам в целевом массиве. затем выполните операцию Math.max() для каждого элемента строки и comp . Можно выполнить следующие шаги:

  • Инициализируйте массив, скажем, comp[] размера M , где каждый элемент равен INT_MIN.
  • Пройдите по матрице mat[][] и для каждой строки проверьте, все ли значения в этой строке меньше или равны соответствующим значениям в целевом массиве или нет. Если найдено, что это правда, то обновите массив comp[] , взяв максимум каждого элемента, присутствующего в comp[] , с соответствующим элементом в строке.
  • После вышеуказанных шагов, если массив comp[] совпадает с массивом target[] , выведите Yes . В противном случае выведите Нет .

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N*M), так как мы используем вложенные циклы для обхода матрицы.
Вспомогательное пространство: O(1), так как мы не используем дополнительное пространство.