代码随想录 -- 数组 -- 有序数组的平方

977. 有序数组的平方 - 力扣(LeetCode)

class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        i=0
        for i in range(len(nums)):
            nums[i]=nums[i]*nums[i]
        nums.sort()
        return nums

题解给出的双指针法的时间复杂度最小。

(版本一)双指针法
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        l, r, i = 0, len(nums)-1, len(nums)-1
        res = [float('inf')] * len(nums) # 需要提前定义列表,存放结果
        while l <= r:
            if nums[l] ** 2 < nums[r] ** 2: # 左右边界进行对比,找出最大值
                res[i] = nums[r] ** 2
                r -= 1 # 右指针往左移动
            else:
                res[i] = nums[l] ** 2
                l += 1 # 左指针往右移动
            i -= 1 # 存放结果的指针需要往前平移一位
        return res

[float('inf')] * len(nums) 是创建一个列表,列表的长度由 nums 变量的长度决定,列表中的每个元素都是正无穷大(float('inf'))。

  1. float('inf') 表示正无穷大,是一个特殊的浮点数,表示比任何其他数值都要大的数。
  2. [float('inf')] 创建了一个只包含一个元素的列表,这个元素是正无穷大。
  3. * len(nums) 是列表乘法操作,将 [float('inf')] 列表重复 len(nums) 次,len(nums) 表示 nums 列表的长度。

例如,如果 nums 是一个长度为3的列表,那么 [float('inf')] * len(nums) 将创建一个新的列表 [inf, inf, inf]

 

还有一种更简单列表推导法,但是时间复杂度没有双指针小。 

(版本三)暴力排序法+列表推导法
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        return sorted(x*x for x in nums)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值