【LeetCode刷题】977. 有序数组的平方

本文介绍了如何解决LeetCode上的一个问题——给定一个非递减排序的整数数组,返回每个数字的平方组成的非递减排序数组。文章提供了两种解题方法:暴力解法(先平方再排序)和双指针法(同时从两端遍历并比较平方值)。双指针法通过初始化左右指针,创建新数组并从两端同时更新,避免了额外的排序步骤,提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:题目描述(力扣

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

2:解题思路

解题方法一:暴力解法

将数组的每个元素先求平方将数组进行排序 

代码展示:

# 暴力解法:先对数组的元素进行平方操作,再排序
class Solution:
    def sortedSquares(self, nums):
        for i in range(len(nums)):
            nums[i] = nums[i] * nums[i]     
        nums.sort()
        return nums

解题方法二:使用双指针

第一步:初始化左右双指针,left, right = 0, len(nums)-1

第二步:定义一个新数组,长度与nums保持一致,元素使用“-1”占位;初始化新数组最右侧的下标site,从最后一个元素开始存储

第三步:从两端开始遍历,当left<=right进入循环:将left指针对应的元素的平方数与right指针对应的元素的平方数进行比较,

1:当right指针对应的元素的平方数大于left指针对应的元素的平方数,将right指针对应的元素的平方数,替换掉新数组对应site位置的值,right指针向左移动,right -= 1

2:当left指针对应的元素的平方数大于等于right指针对应的元素的平方数,将left指针对应的元素的平方数,替换掉新数组对应site位置的值,left指针向右移动,left += 1

3:将新数组的site指针向左移动,site -= 1

第四步:返回新数组res

代码展示:

class Solution:
    def sortedSquares(self, nums):
        # 定义左右双指针
        left, right = 0, len(nums)-1
        # 定义一个新数组,从数组最后一个元素开始存储
        res=[-1]*len(nums)
        site = len(nums)-1
        # 从两端开始遍历,判断左右指针在数组中对应的元素的平方的大小,将平方较大的替换新数组中site位置的值
        while left <= right:
            if nums[left]*nums[left] < nums[right]*nums[right]:
                res[site] = nums[right] * nums[right]
                right -= 1
            else:
                res[site] = nums[left] * nums[left]
                left += 1
            # 将site向左移动
            site -= 1
        return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值