Двухзначная программа сумм в python O (N ^ 2) - PullRequest
0 голосов
/ 02 апреля 2020

Я привык писать код на с ++, но сейчас я пытаюсь выучить python. Я узнал о языке Python, и он очень популярен среди всех. Итак, я подумал, давайте попробуем.

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

Когда я писал код для своих ранее решенных простых вопросов для интервью в python, я столкнулся с проблемой .

Код : Учитывая массив целых чисел, вернуть индексы двух чисел так, чтобы они складывались до заданной c цели.

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

Учитывая массив целых чисел, выведите индексы двух чисел так, чтобы они складывались до заданной цели c.

def twoNum(*arr, t):
  cur = 0
  x = 0
  y = 0

  for i in range (len(arr) - 1):

      for j in range (len(arr) - 1):
          if(i == j):
              break
          cur = arr[i] + arr[j]
          if(t == cur):
              x = arr[i]
              y = arr[j]
              break

      if(t == cur):
          break

  print(f"{x} + {y} = {x+y} ")

arr = [3, 5, -4, 8, 11, 1, -1, 6]

target = 10

twoNum(arr, t=target)

Так вот в чем проблема: я определил x, y в функции, а затем использовал x = arr[i] и y = arr[j], и я печатаю эти значения.

output будет: 0 + 0 = 10 (где цель 10)

Это, наверное, потому, что я изначально использую x = 0 и y = 0 в функции и похоже x и y значения не обновляются, тогда я увидел наброски SE В VSCode я видел, что x и y объявляются дважды, один раз при запуске функции и второй за l oop.

Может кто-нибудь объяснить мне, что здесь происходит?

Для справки, вот изображение кода, который я написал на C ++

This image is my code written in cpp,

Ответы [ 3 ]

2 голосов
/ 02 апреля 2020

Измените это:

def twoNum(*arr, t):

на это:

def twoNum(arr, t):

* используется, чтобы указать, что будет переменное число аргументов, см. this . Это не для указателей, как в C ++.

0 голосов
/ 02 апреля 2020

Вот способ реализации подхода грубой силы с использованием понимания списка:

arr = [1,3,5,7,9]
target = 6

i,j = next((i,j) for i,n in enumerate(arr[:-1]) for j,m in enumerate(arr[i+1:],i+1) if n+m==target)

output:

print(f"arr[{i}] + arr[{j}] = {arr[i]} + {arr[j]} = {target}")

# arr[0] + arr[2] = 1 + 5 = 6

Возможно, еще больше pythoni c будет использовать итераторы:

from itertools import tee
iArr = enumerate(arr)
i,j  = next((i,j) for i,n in iArr for j,m in tee(iArr,1)[0] if n+m==target)

Когда вы приступите к реализации решения O (n), вам следует заглянуть в словари:

d   = { target-n:j for j,n in enumerate(arr) }
i,j = next( (i,d[m]) for i,m in enumerate(arr) if m in d and d[m] != i )
0 голосов
/ 02 апреля 2020

По сути, вы пытаетесь написать C код в python. Вместо этого я бы сначала попытался сосредоточиться на том, как сначала написать код python 'pythoni c'. Но на твой вопрос - пошагово, используя грубую силу в python:

In [173]: def two_num(arr, t):
 ...:     for i in arr:
 ...:         for j in arr[i + 1: ]:
 ...:             if i + j == t:
 ...:                 print(f"{i} + {j} = {t}")
 ...:                 return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...