leetcode 977. 有序数组的平方

977. 有序数组的平方


给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

两法:左右指针;内置函数


内置函数:

时间复杂度O ( N + N log ⁡ N ) O(N + N\log N)O(N+NlogN) 遍历数组进行平方 + python默认使用快排
空间复杂度 O ( N ) O(N)O(N):返回的数组

左右指针:

时间复杂度O ( N ) O(N)O(N) 两指针遍历一次数组即可
空间复杂度 O ( N ) O(N)O(N):返回的数组


class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        # return self.func1(nums)
        return self.double_pointer(nums, len(nums))

    
    def func1(self, nums) -> list:
        # n + nlogn
        square_lst = [num ** 2 for num in nums]
        return sorted(square_lst)

    def double_pointer(self, nums, length) -> list:
        low, high, cur = 0, length - 1, length - 1
        res_lst = [0] * length
        while low <= high:
            low_square, high_square = nums[low]**2, nums[high]**2
            if low_square <= high_square:
                res_lst[cur] = high_square
                high -= 1
            else:
                res_lst[cur] = low_square
                low += 1
            cur -= 1
        return res_lst

版权声明:本文为weixin_42810939原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。