python - 如果输入已经排序,如何避免在对二次方程的输出进行排序的问题中出现索引错误?
问题描述
所以我在 g4g 上尝试了这个问题: https ://practice.geeksforgeeks.org/problems/sort-the-given-array-after-applying-the-given-equation0304/1#
在这里,我使用这个想法来获得二次方程的最小值/最大值,以便我可以应用合并过程(它使用两个排序数组来生成一个包含两个元素的排序数组)这里 A0 和 A<=0 是用于获取抛物线的性质,向上或向下开口
我在 out.append(A*arr[i] arr[i]+B arr[i]+C) as indexerror, list out of range 处遇到错误。我确定如果 x = 0 或 x = len(nums),那么我会遇到麻烦,但我无法想到其他任何事情:
一些测试用例是:
A = 1, B = 1, C = 1。N = 3 Arr[] = {1, 2, 3}
A = -1,B = 2,C = -1。N = 6 Arr[] = {-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
提前致谢!
解决方案
始终尝试将此类问题分解为小问题,以便您更轻松地了解正在发生的事情并发现错误。此外,当您可以使用简单的函数时,您不需要为这个问题定义一个类。
我不想给出一个完成的代码示例,因为我猜你喜欢自己解决问题,所以这里有一个样板可以帮助你解决它。这两个函数的主体不应该超过 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)
小剧透:用pythonN
没那么重要。
推荐阅读
- git - 为什么某些 Git 分支名称中有斜线?
- android - 在外部应用程序中保持屏幕开启
- r - 提取括号 R 之前的所有字符
- docker - 使用 Docker 安装 msodbcsql17 时出现问题
- api - Postman 从 excel / csv 文件请求正文数据 - 正斜杠
- node.js - 成功响应后手机未收到 Azure SMS 消息
- python-3.x - 无法在 Visual Studio 代码终端(python)中运行脚本
- ios - 使用协议对视图模型实施限制-AssociatedType/conditional-conformance/swift
- python - 多个 Python 安装;导入 scipy 失败,出现 WinError 193
- excel - Excel VBA 宏代码返回错误 424 和 1004