Leetcode 977 Squares of a Sorted Array

Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.

Follow up: Squaring each element and sorting the new array is very trivial, could you find an O(n) solution using a different approach?

Input: nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Explanation: After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].
Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]
  • Burada bir liste veriliyor ve listenin karelerinin küçükten büyüğe sıralanmış bir şekilde liste şeklinde dönülmesi isteniyor.
  • İşi karmaşıklaştıran kısım eğer verilen listenin içinde negatif bir sayı varsa sıranın değişmesi gerekir.
  • Bu durumda two pointers yöntemini kullanabiliriz.Bir pointer listenin başından diğeri ise listenin sonundan başlar.Liste başı ve sonundaki sayının mutlak değerlerini alır ve karşılaştırırız.Hangisi büyük ise onun karesini alır yeni listemizin sonuna koyarız.Hangi pointerdaki sayıyı koyduysak onu bir kaydırırız.Bu şekilde tüm listeyi dolaşırız.
image
def sortedSquares(self, A):
    answer = [0] * len(A)
    l, r = 0, len(A) - 1
    while l <= r:
        left, right = abs(A[l]), abs(A[r])
        if left > right:
            answer[r - l] = left * left
            l += 1
        else:
            answer[r - l] = right * right
            r -= 1
    return answer