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

День-15 I

Фон. Массив и струны …. Tagged с Python, Challenge.

Фон

Это задание было частью карты LeetCode’s Learn: Array и Strings. Под подзаголовком два указателя.

Постановка задачи

Учитывая массив 2 -х целых чисел, ваша задача состоит в том, чтобы группировать эти целые числа в n пары целого числа, скажем, (A1, B1), (A2, B2), …, (AN, BN), что делает сумму мин (AI, Bi) Для всех I от 1 до N как можно большего.

Пример 1
Input: [1,4,3,2]

Output: 4
Explanation: n is 2, and the maximum sum of pairs is 4 = min(1, 2) + min(3, 4).

Примечание:

  1. n – положительное целое число, которое находится в диапазоне [1, 10000].
  2. Все целые числа в массиве будут в диапазоне [-10000, 10000].
Решение подход 1
  1. Выберите несколько случайных примеров. И попробуйте вычислять сумму пар вручную для различной комбинации целых чисел, чтобы увидеть, есть ли какая -то шаблон.
  2. На основе шага 1. Одним из выводов, который можно сделать, является сочетание последовательных небольших чисел вместе, за которым следует сочетание больших чисел. Приводит к максимальной сумме.
  3. Теперь 2 достичь шага 2. Мы можем сортировать заданный массив.
  4. Как только массив отсортирован. Мы можем иметь 2 переменных. Одна переменная указывает на текущий элемент. Другой элемент указывает на следующий элемент.
  5. Текущий элемент и следующий элемент образуют пару.
  6. Размер массива 2n. Количество пар упоминается n в операторе проблемы. Основываясь на этом, мы можем сломать петлю.
class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        current=0
        next_element = current+1
        total = 0
        counter = 0     
        nums.sort()
        while current < next_element:
            total += min(nums[current], nums[next_element])
            current  = next_element + 1
            next_element = current+ 1
            counter += 1
            if counter == int(len(nums)/2):
                break
        return total
Узнаваем и обервения из решения решения 1 подход 1
  1. Временная сложность list.sort () – O (nlogn). Тогда мы итерации над списком. И вызов встроенного метода min. Мин имеет свою сложность. Это, в свою очередь, увеличит общую временную сложность.
  2. Мы уже сортируем массив. А затем формирует пары. Таким образом, всегда минимальный элемент будет текущим элементом. Следовательно, нет необходимости снова вызывать встроенный метод MIN, чтобы найти минимум из двух чисел.
Обновленный код на основе вывода из подхода к решению 1
class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        current=0
        next_element = current+1
        total = 0
        counter = 0
        nums.sort()
        while current < next_element:
            total += nums[current]
            current  = next_element + 1
            next_element = current+ 1
            counter += 1
            if counter == int(len(nums)/2):
                break
        return total

В приведенном выше решении мы разбиваем петлю, когда количество пар равна половине длины массива. Другой подход может заключаться в том, чтобы отказаться от всей этой части. Вместо этого поместите это условие. Индекс текущего элемента всегда должен быть меньше длины массива.

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        current=0
        next_element = current+1
        total = 0
        nums.sort()
        while current < next_element and current < len(nums)-1:
            total += nums[current]
            current  = next_element + 1
            next_element = current+ 1
        return total
Участие
  1. Временная сложность – O (Nlogn).
  2. Избавился от ненужной встроенной функции min ().
  3. Два техники указателя.
  4. List.sort () Метод-это сортировка на месте. Использование Sorted () для сортировки вернуло бы новый список. Это, однако, не было необходимым.

Оригинал: “https://dev.to/mridubhatnagar/day-15-array-partition-i-h8i”