Logo

[LeetCode] 977. Squares of a Sorted Array

[LeetCode] 977. Squares of a Sorted Array の解答と解説

問題

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

解答と解説

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        n = len(nums)
        // 最後のindexから値を更新していくため、初期化が必要
        ans = [0] * n
        
        left, right = 0, n - 1
        i = n - 1
                // forでもよい
        while left <= right:
            if abs(nums[left]) < abs(nums[right]):
                ans[i] = nums[right] * nums[right]
                right -= 1
            else:
                ans[i] = nums[left] * nums[left]
                left += 1
            i -= 1
            
        return ans

numsの長さをnとした時、

  • Time Complexity: O(n)
  • Space Complexity: O(1)

inputの配列がソートされていることで、二乗された値は必ず両端のいずれかが最大値になる。

それがわかれば、あとはTwo Pointersのパターンを使って、答えの最大値から埋めていけば良い。