其他分享
首页 > 其他分享> > Leetcode977 有序数组的平方

Leetcode977 有序数组的平方

作者:互联网

方法一:先平方,再排序

时间复杂度:O(n+nlogn) => O(nlogn)

Python
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            nums[i] = nums[i] ** 2
        nums.sort()
        return nums
Java
class Solution {
    public int[] sortedSquares(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            nums[i] = nums[i] * nums[i];
        }
        Arrays.sort(nums);
        return nums;
    }
}

方法二:双指针

当数组被平方后可以发现数组中的数值呈现【大,小,大】的形式。最大值会出现在数组的两端。

设置双指针分别放在数组的起始和末尾。

创建一个新的数组存放最后的结果。

时间复杂度:O(n)

Python
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        left = 0
        right = len(nums) - 1
        result = [0] * len(nums)
        pos = len(nums) - 1

        while left <= right:
            if abs(nums[left]) >= abs(nums[right]):
                result[pos] = nums[left] ** 2
                left += 1
            else:
                result[pos] = nums[right] ** 2
                right -= 1
            pos -= 1

        return result
JAVA
class Solution {
    public int[] sortedSquares(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        int[] result = new int[nums.length];
        int pos = nums.length - 1;

        while (left <= right) {
            int ls = nums[left] * nums[left];
            int rs = nums[right] * nums[right];
            if (ls >= rs) {
                result[pos] = ls;
                left++;
            }else {
                result[pos] = rs;
                right--;
            }
            pos--;
        }
        return result;
    }
}

标签:平方,right,nums,int,pos,Leetcode977,result,数组,left
来源: https://www.cnblogs.com/waitting975/p/16398444.html