力扣-997.有序数组平方

        由题目得知数组为非递减顺序,由此可以判断平方后的数较大的数值会位于数组的两端逐渐向中聚拢的情况

做题时的解题思路:

        利用双指针left,right分别指向数组首部与数组尾部,创建一个新的数组ans,将两个指针所指向的位置的元素进行比较,将较大的元素依次从尾部向首部填充。

if nums[left]**2 > nums[right]**2:
    ans[n - 1] = nums[left]**2
    left += 1
else:
    ans[n - 1] = nums[right]**2
    right -= 1

                        left                                                                                            right

-3-10235

                                                因为right^2 > left^2,所以将25填入数组尾部,将n(新数组尾部指针)向前移动一位

        n -= 1

                                                

ans[n - 1] = nums[right]**2
0000025

                                                                                                    n       <-         n

                       

   填完之后将 right 指针向前移一位,所指向的元素的平方继续与left指针所指向元素的平方比较。如果大于则填入,否则left填入

                          left                                                                         right

-3-10235

                

                                                left                                                   right

-3-10235
0000925

                                                                                n       <-         n

      比较直到left <= right(左右指针相遇)为止。

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        left = 0
        right = len(nums) - 1
        n = len(nums)
        ans = [0] * n
        while left <= right:
            if nums[left]**2 > nums[right]**2:
                ans[n - 1] = nums[left]**2
                left += 1
            else:
                ans[n - 1] = nums[right]**2
                right -= 1
            n -= 1
                
        return ans

                 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值