Рубрики
Без рубрики

День1 – Проверьте формирование массива через Concatenation

Вся кодекс для вызовов я здесь делаю: Ruarfff / L … с меткой лецкода, Python, Challenge.

Весь код для проблем я здесь делаю:

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”