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

1:题目描述(力扣)

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

【LeetCode刷题】977. 有序数组的平方_第1张图片

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

你可能感兴趣的:(Leetcode,leetcode,算法,python)