题目链接:977. 有序数组的平方
题目介绍
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序
双指针法
数组其实是有序的, 只不过负数平方之后可能成为最大数。
所以数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
Java代码
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0, right = nums.length - 1;
int[] res = new int[nums.length];
int k = nums.length - 1;
while (left <= right) {
if (nums[left]*nums[left] > nums[right]*nums[right])
res[k--] = nums[left]*nums[left++];
else
res[k--] = nums[right]*nums[right--]
}
return res;
}
}
- 时间复杂度:O(n)