题目:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
想法:
看到本题,首先想到的是可能存在负数的情况,负负得正后数组就边无序了
利用双指针的思路:
1、先将整个数组分为两部分,分界点为index,则从0到index都是负数,从index到最后都是正数
2、则平方后,从0到index是递减的,从index到最后是递增的
3、此时就可以用到归并排序的思路,两个指针分别是index和index+1
a. 前半部分从index往前遍历,后半部分从index+1往后遍历
b. 当前半部分遍历完后,则一直遍历后半部分即可,反之只遍历前半部分
代码:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
res = list()
index = -1
for i in range(len(nums)):
if nums[i] < 0:
index = i
else:
break
low, high = index, index + 1
while low >= 0 or high < len(nums):
if low < 0:
res.append(nums[high] * nums[high])
high += 1
elif high == len(nums):
res.append(nums[low] * nums[low])
low -= 1
elif nums[low] * nums[low] < nums[high] * nums[high]:
res.append(nums[low] * nums[low])
low -= 1
else:
res.append(nums[high] * nums[high])
high += 1
return res