C/C++教程

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;
    }
}
这篇关于Leetcode977 有序数组的平方的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!