Я новичок ie до python. Недавно я попытался выполнить упражнение по кодированию. Я выполнил упражнение по написанию кода, но некоторые тестовые примеры не дали результатов, сказав, что код занимает слишком много времени, вероятно, больше, чем 10 se c. Я попытался осмотреться, чтобы увидеть, как я могу иметь код более эффективно, но информации слишком много. Любая помощь или направление приветствуется. Ниже приведены некоторые подробности, относящиеся к упражнениям.
Мне нужно построить функцию, которая принимает целочисленный список (последовательность) в качестве входных данных. В списке может быть не более 10 ^ 5 элементов. Функция должна вернуть минимальное количество чисел, которое Джек должен был выбрать из последовательности ввода, чтобы его оценка была больше, чем у Джилл.
Например: мы передаем ввод функции как [1,1,0,0,0] - минимальное количество чисел, которое Джеку нужно выбрать, - 0.
объяснение : если Джек не выберет ни одного номера - его счет будет равен 0. Джилл должен выбрать все оставшиеся номера. его счет будет 1 + 1-1-1-1 = -1. поэтому функция должна выводить 0 в качестве вывода.
Например: мы передаем ввод функции как [0,1,1,0,1] - минимальное количество чисел, которое нужно выбрать Джеку, равно 3.
объяснение : если джек не выбирает никаких значений, то - оценка джек -0 и оценка Джилл - -1 + 1 + 1-1 + 1 = 1.
, если Джек выбирает одно значение, тогда оценка Джека - -1 и оценка Джилла - 1 + 1-1 + 1 = 2
, если Джек выбирает первые 2 значения, затем оценка Джека - 1-1 и оценка Джилла - 1-1 + 1 = 1
, если Джек выбирает первые 3 значения, тогда оценка Джека - 1-1 + 1 = 1 и оценка Джилла - -1 + 1 = 0
- Как вы можете видеть, оценка Джек больше, чем Джилл, поэтому функция должна напечатать 3 в качестве вывода.
Ниже приведены два способа, которыми я пытался это сделать.
def game(s):
#create a new list which substitutes 0 with -1 in input list so that I am sum the values oflist.
newlist1=[-1 if p==0 else 1 for p in s]
if sum(newlist1)<0:
print("the minimum amount numbers jack need to pick is: ", 0)
else:
for l in range(1,len(s)+1): # main loop
jackscore=0
jillscore=0
for m in range(l): #loop to calculate jack's score
if s[m] == 1:
jackscore=jackscore+1
else:
jackscore=jackscore-1
for n in range(l,len(s)): #loop to calculate jack's score
if s[n] == 1:
jillscore=jillscore+1
else:
jillscore=jillscore-1
#for each iteration we will check if jack's score is greater than Jill
if jackscore>jillscore:
break
print("the minimum amount numbers jack need to pick is: ",l)
#main program starts here
if __name__ == '__main__':
#y=[1,0,0,1,0]
y = [int(x) for x in input("enter any number of 1 and 0 seperated by comma: ").split(',')]
game(y)
вторая попытка
def game(s):
#create a new list which substitutes 0 with -1 in input list so that I am sum the values oflist.
newlist1=[-1 if p==0 else 1 for p in s]
if sum(newlist1)<0:
print("the minimum amount numbers jack need to pick is: ", 0)
else:
for l in range(1,len(s)+1): # main loop
#create 2 new lists one for jack and other for Jill and sum values in list
if sum(newlist1[:l])>sum(newlist1[l:]):
break
print("the minimum amount numbers jack need to pick is: ",l)
#main program starts here
if __name__ == '__main__':
#y=[1,0,0,1,0]
y = [int(x) for x in input("enter any number of 1 and 0 seperated by comma: ").split(',')]
game(y)
Существуют ли другие способы, которые могут работать быстрее, чем эти. если да, пожалуйста, помогите.