Найти в Дзене
Бывалый Айтишник

Leetcode, задача 1337. The K Weakest Rows in a Matrix: Кото-талант шоу 🎵🐾

Как выбрать наименее талантливых кошачьих исполнителей для дополнительных занятий 🎤🐱 🎉 Привет, кото-фанаты и кошачьи рок-звёзды! 🌟 Ну что, готовы к самому мяукающему талант-шоу в истории? У нас есть коты, у нас есть сцена, и конечно же, у нас есть матрица! Какая связь? А вот какая: представьте, что каждая строка матрицы — это кошачий бэнд, и "1" — это котики-виртуозы, а "0" — котики, которые... эмм... просто стоят на сцене. Как выбрать самых не талантливых для курса "Мяузыки"? 🎵🐱 Сегодня разберём! 👉 Полное условие задачи 🚀 Что нового я узнаю? 🤔 Подводные камни 🐾 Сбор участников: Подготовка данных 🎸 Первый шаг на пути к славе — это определить количество талантов (или их отсутствие) в каждом кошачьем бэнде. # Количество талантов в каждом кошачьем бэнде
talent_count = [sum(row) for row in mat] 🎤 Честное судейство: Сортировка и выбор 🎖️ Настало время для жюри! Но как же выбрать самых не талантливых, когда перед тобой столько мяукания и лапок? Для этого мы и собрали список тала
Оглавление

Как выбрать наименее талантливых кошачьих исполнителей для дополнительных занятий 🎤🐱

🎉 Привет, кото-фанаты и кошачьи рок-звёзды! 🌟

Ну что, готовы к самому мяукающему талант-шоу в истории? У нас есть коты, у нас есть сцена, и конечно же, у нас есть матрица! Какая связь? А вот какая: представьте, что каждая строка матрицы — это кошачий бэнд, и "1" — это котики-виртуозы, а "0" — котики, которые... эмм... просто стоят на сцене. Как выбрать самых не талантливых для курса "Мяузыки"? 🎵🐱 Сегодня разберём!

👉 Полное условие задачи

🚀 Что нового я узнаю?

  • Как не потеряться в матрице (не той, где Нео, конечно) 🤓
  • Как найти кошачий "клондайк" в пустыне нулей и единиц 🌵

🤔 Подводные камни

  • Не перепутать индексы, иначе коты начнут мяукать не в такт! 🙀
  • Застрять в лабиринте сортировки и выбора! 🎭

🐾 Сбор участников: Подготовка данных 🎸

Первый шаг на пути к славе — это определить количество талантов (или их отсутствие) в каждом кошачьем бэнде.

-2
# Количество талантов в каждом кошачьем бэнде
talent_count = [sum(row) for row in mat]

🎤 Честное судейство: Сортировка и выбор 🎖️

Настало время для жюри! Но как же выбрать самых не талантливых, когда перед тобой столько мяукания и лапок? Для этого мы и собрали список талантов!

-3
# Сортируем список талантов, но с сохранением индексов.
# Это важно, иначе кошачьи дивы обидятся!
sorted_indices = sorted(range(len(talent_count)), key=lambda i: (talent_count[i], i))

Оу, погодите, котята! 🐾 Этот момент может запутать даже самого искушенного кошачьего программиста. Давайте разберем эту магическую строчку.

Что тут происходит? 🎩

Мы просто сортируем индексы строк (или, если вернуться к нашей метафоре, кошачьих бэндов) по количеству "таланта" в каждой строке.

⚠️ Не перепутать местами i и talent_count[i]. Иначе котики начнут мяукать не в такт!

Разбор этой магии на пальцах 🎤

  1. range(len(talent_count)): Создаем список индексов от 0 до m−1, где m — количество строк (кошачьих бэндов).
  2. key=lambda i: (talent_count[i], i): Это ключ для сортировки. Сначала сортируем по количеству таланта, затем по индексу.
  3. sorted(...): Собственно, сама сортировка.

Простая версия кода 🎉

Если эта строчка кажется сложной, можно разбить её на несколько шагов:

-4
# Создаем пары (количество таланта, индекс)
pairs = [(count, i) for i, count in enumerate(talent_count)]

# Сортируем эти пары
pairs.sort()

# Извлекаем отсортированные индексы
sorted_indices = [i for count, i in pairs]

Так проще, правда? Но помните, котики не любят, когда их талант просто так разбрасывают по коду! 😼

🎉 Кто покинет шоу? Выбор "слабых" 🎭

И вот наступил момент истины! Время выбрать k наименее талантливых котиков для... дополнительных занятий по мяузыке.

-5
# Кто не справился с мяуканием на сцене? Вот они, неудачники!
return sorted_indices[:k]

😹 Финальный кот решения 🎶

-6
class Solution:
def kWeakestRows(self, mat: List[List[int]], k: int) -> List[int]:
# Котики, покажите ваш талант!
talent_count = [sum(row) for row in mat]

# Судьи, ваш вердикт!
sorted_indices = sorted(
range(len(talent_count)),
key=lambda i: (talent_count[i], i)
)

# И вот они, котики, которым пора учиться мяукать!
return sorted_indices[:k]

🐾 Асимптотика 🤓

Асимптотика этого решения — O(m×n+m log m), где m — количество строк, n — количество столбцов. То есть, это быстрее, чем кот поймает лазерный указатель!

😸 Анекдот 🎉

Знаете, почему кошки не участвуют в реалити-шоу? Потому что каждое шоу с их участием автоматически становится "Кошачьим талант-шоу", и ни одна кошка не согласится поделиться своей звездной славой! 🌟

Помяукайте в комментариях, если вам понравился этот пост! 🐱👇