LeetCode #977. Squares of a Sorted Array
题目
977. Squares of a Sorted Array
解题方法
双指针法,先从头开始遍历数组,遍历过程中给每个数取平方,直到遇到第一个非负数,此时设置j为最后一个负数。再从这个位置开始向两端遍历数组,比较A[i]和A[j]的大小关系,将小的放入rat中,如果放的是A[i],则需要对下一位A[i+1]取平方。这样操作直到i或j触底,之后再把没触底的一个指针遍历完即可。
时间复杂度:O(n)
空间复杂度:O(n)
代码
class Solution:
def sortedSquares(self, A: List[int]) -> List[int]:
i = 0
while i < len(A) and A[i] < 0:
A[i] *= A[i]
i += 1
else:
if i < len(A):
A[i] *= A[i]
j = i - 1
rat = []
while i < len(A) and j > -1:
if A[i] > A[j]:
rat.append(A[j])
j -= 1
else:
rat.append(A[i])
i += 1
if i < len(A):
A[i] *= A[i]
while i < len(A):
rat.append(A[i])
i += 1
if i < len(A):
A[i] *= A[i]
while j > -1:
rat.append(A[j])
j -= 1
return rat

浙公网安备 33010602011771号