0
点赞
收藏
分享

微信扫一扫

#python #leetcode

紫荆峰 2022-01-05 阅读 34

题目

在这里插入图片描述

算法1(易想)

  • 先平方,再排序,即 return sorted(nums[i]**2 for i in nums])

算法2(双指针法)

  1. 如果原序列包含正、负数,则原来序列的平方按递减到零再递增的规律分布
  2. 这种U型分布下,可以采用双指针法,从两头到中间逼近,比较两个指针所指元素平方的大小并排序
  3. 申请一个和原序列同样大小的空LIst,从最后一个元素(最大元素)开始填充
  4. 如果序列为非负序列或者非正序列,该方法同样适用

代码2

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        length = len(nums)
        left,right = 0,length-1
        ans = [0]*length
        cur = length -1

        while right > left:
            if nums[right]**2>nums[left]**2 :
                ans[cur] = nums[right]**2
                right -= 1
            else:
                ans[cur] = nums[left]**2
                left += 1
            cur -= 1
        ans[0] = nums[left]**2
        return ans

cheat sheet

  1. 申请空列表操作 ans = [0]*len
  2. 注意:变量名不得与函数重名
  3. 连加操作 += ,中间没有空格
  4. 注意不要混淆下标和数值
举报

相关推荐

0 条评论