Skip to content

977. Squares of a Sorted Array

Problem Page: https://leetcode.com/problems/squares-of-a-sorted-array/

#
# @lc app=leetcode id=977 lang=python3
#
# [977] Squares of a Sorted Array
#
# https://leetcode.com/problems/squares-of-a-sorted-array/description/
#
# algorithms
# Easy (71.89%)
# Likes:    8325
# Dislikes: 204
# Total Accepted:    1.5M
# Total Submissions: 2.1M
# Testcase Example:  '[-4,-1,0,3,10]'
#
# Given an integer array nums sorted in non-decreasing order, return an array
# of the squares of each number sorted in non-decreasing order.
#
#
# Example 1:
#
#
# 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].
#
#
# Example 2:
#
#
# Input: nums = [-7,-3,2,3,11]
# Output: [4,9,9,49,121]
#
#
#
# Constraints:
#
#
# 1 <= nums.length <= 10^4
# -10^4 <= nums[i] <= 10^4
# nums is 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?
#

# @lc code=start

from typing import List


class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        # solution 1:
        # return sorted((n*n for n in nums))

        # solution 2:
        i = 0
        k = j = len(nums) - 1

        res = [None for _ in nums]

        while i <= j:
            x = nums[i]
            y = nums[j]

            if abs(x) > abs(y):
                res[k] = x*x
                i += 1
            else:
                res[k] = y*y
                j -= 1
            k -= 1

        return res


# @lc code=end

Last update: Sep 17, 2023
Created: Sep 17, 2023

Comments