Весь код для проблем я здесь делаю:
Ruarfff/Leetcode-Jan-2021
Просто быстрое обратите внимание, что я делаю эту серию в надежде, что эта привычка писать о проблемах, поможет мне завершить 30 дней. Я также улучшаю свои знания Python при этом, поэтому мне жаль, если код выглядит ужасно! Я ограничиваю свое время каждый день, поэтому решения являются только моими лучшими усилиями, а не лучшими (или даже особенно хорошими) решениями.
Проблема
LeetCode Link.
Вам дают массив отчетливый целые числа вырвать
и массив целочисленных массивов Штуки
где целые числа в Штуки
являются отчетливый . Ваша цель – сформировать Arr
Согласив массивы в Штуки
в любом порядке Отказ Тем не менее, вы не разрешено изменить порядок целых чисел в каждом массиве части [я]
Отказ
Вернуть истинный
Если можно сформировать массив Arr
от Штуки
Отказ В противном случае верните ложь
Отказ
Мои тесты
import pytest from .Day1 import Solution s = Solution() @pytest.mark.parametrize( "arr,pieces", [([49, 18, 16], [[16, 18, 49]]), ([1, 3, 5, 7], [[2, 4, 6, 8]])] ) def test_cannot_form_array(arr, pieces): assert not s.canFormArray(arr, pieces) @pytest.mark.parametrize( "arr,pieces", [ ([], []), ([85], [[85]]), ([15, 88], [[88], [15]]), ([91, 4, 64, 78], [[78], [4, 64], [91]]), ], ) def test_can_form_array(arr, pieces): assert s.canFormArray(arr, pieces)
Мое решение
from typing import List class Solution: def canFormArray(self, arr: List[int], pieces: List[List[int]]) -> bool: index = 0 new_index = index pieces_m = pieces while index < len(arr): curr = arr[index] for a in pieces_m: if a[0] == curr and a == arr[index : index + len(a)]: new_index += len(a) pieces_m.remove(a) if new_index == index: return False else: index = new_index return True
Анализ
Мой комментарий
Производительность не была ужасна, я думаю, но использование памяти было довольно плохим.
То, как я думал об этом, был, если вы верете на массив, посмотрите, чтобы посмотреть, начинается ли какие-либо из деталей с этого значения. Если это так, проверьте следующий сегмент для матча. Если есть совпадение, поднимите указатель до конца сегмента. Если когда-либо нет совпадения, просто короткое замыкание.
Я немного новичок в Python Но я думаю, что одно место, где я мог заплатить цену в память, была arr [index: index + len (a)]
. Мне нужно исследовать и посмотреть, что это создает новый список каждый раз.
Я остановился на самом простом решении в тот день, когда я фактически заканчивал делать 2 решения (бонус на эту неделю также), и я перешел за свое выделенное время на вечер. Думая об этом после написания здесь, как и большинство других проблем, я мог бы сделать это быстрее с Дикт (Hashmap). Может дать вам выстрел после окончания задачи.
Оригинал: “https://dev.to/ruarfff/day1-check-array-formation-through-concatenation-53fd”