#python
Вопрос:
Поэтому я попробовал этот вопрос на g4g: https://practice.geeksforgeeks.org/problems/sort-the-given-array-after-applying-the-given-equation0304/1#
Здесь я использую идею, чтобы получить минимумы/максимумы квадратного уравнения, чтобы я мог применить процесс слияния(который использует два отсортированных массива для создания одного отсортированного массива, содержащего оба элемента). Здесь A0 и A
Я сталкиваюсь с ошибкой в out.добавить(A*arr[i]arr[i] B arr[i] C) в качестве ошибки индекса, список вне диапазона. Я уверен, что если x = 0 или x = len(nums), то у меня будут проблемы, но я не могу думать иначе:
Некоторые из тестовых примеров являются:
- A = 1, B = 1, C = 1. N = 3 Об.[] = {1, 2, 3}
- A = -1, B = 2, C = -1. N = 6 Об.[] = {-1, 0, 1, 2, 3, 4}
Вот мой код для того же:
class Solution:
def sortArray(self, arr, n, A, B, C):
# Code here
#nums = arr[:]
#print(nums)
out = []
nums = []
for i in range(len(arr)):
nums.append(A*arr[i]*arr[i] B*arr[i] C)
x = -((B)//2*A)
#print(x)
i = x
j = x-1
#out = []
if i == 0:
return arr
if A>0:
while j>=0 and i<len(nums):
if A*arr[i]*arr[i] B*arr[i] C<=A*arr[j]*arr[j] B*arr[j] C:
out.append(A*arr[i]*arr[i] B*arr[i] C)
i =1
else:
out.append(A*arr[j]*arr[j] B*arr[j] C)
j-=1
while i<len(nums):
#print(i)
out.append(A*arr[i]*arr[i] B*arr[i] C)
i =1
while j>=0:
out.append(A*arr[j]*arr[j] B*arr[j] C)
j-=1
return out
elif A<=0:
i = 0
j = len(nums)-1
while j>=x and i<x:
if A*arr[i]*arr[i] B*arr[i] C<=A*arr[j]*arr[j] B*arr[j] C:
out.append(A*arr[i]*arr[i] B*arr[i] C)
i =1
else:
out.append(A*arr[j]*arr[j] B*arr[j] C)
j-=1
while j>=x:
out.append(A*arr[j]*arr[j] B*arr[j] C)
j-=1
while i<x:
out.append(A*arr[i]*arr[i] B*arr[i] C)
i =1
return out
#{
# Driver Code Starts
#Initial Template for Python 3
if __name__ == '__main__':
T=int(input())
for i in range(T):
a, b, c = input().split()
a = int(a)
b = int(b)
c = int(c)
n = int(input())
arr = list(map(int, input().split()))
ob = Solution()
ans = ob.sortArray(arr, n, a, b, c)
for each in ans:
print(each,end=" ")
print()
#} Driver Code Ends
Заранее спасибо!
Комментарии:
1. Почему бы просто не вывести массив функций из заданных входных данных с помощью
map
функции, а затем отсортировать новый массив по любому алгоритму сортировки O(N). Это было бы гораздо более прямолинейно.
Ответ №1:
Всегда старайтесь разбить такую проблему на мелкие части, чтобы вам было легче понять, что происходит, и найти ошибки. Кроме того, вам не нужно определять класс для этой проблемы, когда вы можете просто использовать простые функции.
Я не хочу приводить готовый пример кода, потому что я предполагаю, что вам нравится решать проблему самостоятельно, поэтому вот шаблон, который может помочь вам ее решить. Тело двух функций не должно быть длиннее, возможно, 10 строк кода, поэтому, если у вас в итоге будет больше строк, вам следует пересмотреть свое решение. Удачи 🙂
def calculate_new_array(arr, a, b, c):
# calculate the resulting array out of the input values
# ...
# return resulting array
return result
def sort_array(arr):
# sort the array somehow
# ...
# return the sorted array
return sorted_arr
if __name__ == '__main__':
a, b, c = input().split()
a = int(a)
b = int(b)
c = int(c)
arr = list(map(int, input().split()))
new_array = calculate_new_array(arr, a, b, c)
sorted_array = sort_array(new_array)
print(sorted_array)
Маленький маленький спойлер: С python N
это не так важно.