# 「力扣」第 977 题:有序数组的平方(简单)

# 题目描述

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

示例 1:

输入:nums = [-4,-1,0,3,10]

输出:[0,1,9,16,100]

解释:平方后,数组变为 [16,1,0,9,100]

排序后,数组变为 [0,1,9,16,100]

示例 2:

输入:nums = [-7,-3,2,3,11]

输出:[4,9,9,49,121]

提示:

  • nums 已按 非递减顺序 排序

进阶:

  • 请你设计时间复杂度为 O(n) 的算法解决本问题

# 理解题意

注意题目中给出的条件:给出的数组 nums 是一个非递减数组。

# 方法一:暴力解法

参考代码 1

import java.util.Arrays;

public class Solution {

    public int[] sortedSquares(int[] A) {
        int len = A.length;
        int[] res = new int[len];
        for (int i = 0; i < len; i++) {
            res[i] = A[i] * A[i];
        }
        Arrays.sort(res);
        return res;
    }
}

# 方法二:双指针

参考代码 2

public class Solution {

    public int[] sortedSquares(int[] A) {
        int len = A.length;
        int[] res = new int[len];

        // 从后向前赋值,平方值最大的数只能出现在输入数组的头和尾
        int index = len - 1;
      	// 双指针
        int left = 0;
        int right = len - 1;
        while (left <= right) {
            if (A[left] * A[left] > A[right] * A[right]) {
                res[index] = A[left] * A[left];
                left++;
            } else {
                res[index] = A[right] * A[right];
                right--;
            }
            index--;
        }
        return res;
    }
}

作者:liweiwei1419 链接:https://suanfa8.com/two-pointers/solutions-3/0977-squares-of-a-sorted-array 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last Updated: 11/18/2024, 11:51:07 PM