题目:原题链接(中等)
标签:数学、双指针
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
Ans 1 (Python) | O ( N ) | O ( 1 ) | 44ms (92.65%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def sortTransformedArray(self, nums: List[int], a: int, b: int, c: int) -> List[int]:
size = len(nums)
# 处理开口向上的情况
if a > 0:
# 计算对称轴的x坐标
mid = -(b / (2 * a))
ans = []
l, r = 0, size - 1
while l <= r:
if abs(mid - nums[l]) >= abs(nums[r] - mid):
v = nums[l]
l += 1
else:
v = nums[r]
r -= 1
ans.append(a * v * v + b * v + c)
ans.reverse()
return ans
# 处理开口向下的情况
elif a < 0:
# 计算对称轴的x坐标
mid = -(b / (2 * a))
ans = []
l, r = 0, size - 1
while l <= r:
if abs(mid - nums[l]) >= abs(nums[r] - mid):
v = nums[l]
l += 1
else:
v = nums[r]
r -= 1
ans.append(a * v * v + b * v + c)
return ans
# 处理一次函数的情况
else:
ans = []
for i in range(size):
ans.append(b * nums[i] + c)
# 处理单调递减的情况
if b < 0:
ans.reverse()
return ans