力扣977题
题目描述:
给你一个按 非递减顺序 排序的整数数组
nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
题解思路:
方法一:也是比较容易想到的,遍历nums[],再用工具类直接排序后返回;
方法二:可以用双指针,从两头开始找,两个下标的元素谁大就先写谁的,倒着填入res[]中。
方法一:
import java.util.Arrays;
class Solution {
public int[] sortedSquares(int[] nums) {
int[] res=new int[nums.length];
for (int i = 0; i < nums.length; i++) {
res[i]=nums[i]*nums[i];
}
Arrays.sort(res);
return res;
}
}
方法二:
class Solution {
public int[] sortedSquares(int[] nums) {
int[] res = new int[nums.length];
// 双指针,谁大先写谁的
int t = res.length - 1;
for (int i = 0, j = res.length - 1; i <= j; ) {
int i1 = Math.abs(nums[i]);
int i2 = Math.abs(nums[j]);
if (i1 > i2) {
res[t--] = i1 * i1;
i++;
} else if (i1 <= i2) {// 两个相等的情况可以合并到这里,合并到上面也可以
res[t--] = i2 * i2;
j--;
}
}
return res;
}
}