目录
一、题目
给定一个按非递减顺序排序的整数数组 A
,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
二、示例
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
提示:
- 1 <= A.length <= 10000
- -10000 <= A[i] <= 10000
- A 已按非递减顺序排序
三、思路
1、暴力法,将数组按照绝对值大小进行排序,再对其进行平方。
2、双指针法:因为原数组是非递减,分三种情况:
(1)有负数也有正数:
那么按照绝对值来看的话,从左往右到0,从右往左到0,均是从大到小的顺序。[-3, -2, -1, 0, 1, 2, 3]
因此我们每次只需要比较两头的大小即可。
(2)均为负数:按照绝对值大小是从大到小
(3)均为正数:按照绝对值大小,从右往左是从大到小
四、代码
1、
class Solution:
def sortedSquares(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
for i in range(len(A)):
A[i] = abs(A[i])
A.sort()
for i in range(len(A)):
A[i] = A[i] * A[i]
return A
if __name__ == '__main__':
# arr = [-4,-1,0,3,10]
arr = [-7,-3,2,3,11]
s = Solution()
new_arr = s.sortedSquares(arr)
print(new_arr)
2、
class Solution:
def sortedSquares(self, A):
i = 0
j = len(A) - 1
pos = len(A) - 1
ans = [0] * len(A)
while i <= j:
if A[i] * A[i] >= A[j] * A[j]:
ans[pos] = A[i] * A[i]
i += 1
else:
ans[pos] = A[j] * A[j]
j -= 1
pos -= 1
return ans
if __name__ == '__main__':
# arr = [-4,-1,0,3,10]
arr = [-7,-3,2,3,11]
s = Solution()
new_arr = s.sortedSquares(arr)
print(new_arr)