Массивы/струны проблемы кодирования (4 серии деталей)
Оператор задачи: Напишите функцию, чтобы найти недостающий элемент из данных двух массивов.
Сложный уровень: Легко
Тестовые случаи:
- [1, 2, 3, 4, 5, 6, 7],[3, 7, 2, 1, 4, 6] –> 5
- [5, 7, 7, 5, 7], [7, 7 ,5, 5] –> 7
- [9, 8, 7, 6, 5, 4, 3, 2, 1],[9, 8, 7, 5, 4, 3, 2, 1] –> 6
- [1, 2, 4, 7, 9], [7, 9, 4, 2] –> 1
Существует количество способов решить эту проблему. Ниже приведены 4 возможных решения
Алгоритм
Словарный метод
- Инициализировать словарь.
- Итерация через первый массив,
- Если в словаре существует элемент в текущей итерации, в словаре
- Увеличьте его значение на 1.
- Еще,
- Добавьте элемент как ключ и значение как 1 в словаре
- Итерация через второй массив,
- Если в словаре существует элемент в текущей итерации, в словаре
- Уменьшение его значения на 1.
- Еще,
- Добавьте элемент как ключ и значение как 1 в словаре.
- Для каждого элемента в словаре
- Если значение элемента не 0
- вернуть элемент
- Если значение элемента не 0
Эксклюзивный или (XOR) Метод
- Инициализация переменной результат до 0
- Объедините оба массива.
- Перечислить через объединенный массив
- Сделать Xor Работа каждого элемента с результатом
- Вернуть результат, который будет отсутствующим элементом
Сортировка метода
- Сортируйте оба данных массива.
- Итерация над обоими массивами одновременно.
- При данной итерации, если значение обоих итераторов отличается,
- Верните элемент из первого массива, так как это отсутствующий элемент.
Сумма метода
- Рассчитайте сумму всех элементов в обоих массивах.
- Вычтите сумму второго массива из первого массива.
- Результатом будет отсутствующий элемент.
Сложность времени и пространства
- Словарный метод
- Сложность времени: O (n)
- Сложность пространства: O (n)
- МЕТОД XOR
- Сложность времени: O (n)
- Сложность пространства: O (n)
- Сортировка метода
- Сложность времени: O (Nlogn)
- Сложность пространства: O (n)
- Сумма метода
- Сложность времени: O (n)
- Сложность пространства: O (1)
Код
class MissingElement(object): def missingElement(self, arr1, arr2): count = {} for element in arr1: if element in count: count[element] += 1 else: count[element] = 1 for element in arr2: if element in count: count[element] -= 1 else: count[element] = 1 for k in count: if count[k] != 0: return k def missingElement2(self, arr1, arr2): result = 0 for element in arr1 + arr2: result ^= element return result def missingElement3(self, arr1, arr2): arr1.sort() arr2.sort() for ele1, ele2 in zip(arr1, arr2): if ele1 != ele2: return ele1 return arr1[-1] def missingElement4(self, arr1, arr2): return abs(sum(arr1) - sum(arr2))
Модульный тест
import unittest from missingElement import MissingElement class TestMisssingElement(unittest.TestCase): def test_ele(self, sol): self.assertEqual(sol([5, 5, 7, 7], [5, 7, 7]), 5) self.assertEqual(sol([1, 2, 3, 4, 5, 6, 7], [3, 7, 2, 1, 4, 6]), 5) self.assertEqual(sol([9, 8, 7, 6, 5, 4, 3, 2, 1], [9, 8, 7, 5, 4, 3, 2, 1]), 6) print("All test cases passed") def main(): test = TestMisssingElement() element = MissingElement() test.test_ele(element.missingElement) test.test_ele(element.missingElement2) test.test_ele(element.missingElement3) test.test_ele(element.missingElement4) if __name__ == "__main__": main()
GitHub Repo
Оригинальная статья
Счастливого кодирования! 🌟
Массивы/струны проблемы кодирования (4 серии деталей)
Оригинал: “https://dev.to/codewithml/find-missing-element-from-given-two-arrays-47l3”