有序数组的平方-力扣(Java)
977. 有序数组的平方
题目描述
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
思路
- 我采用的是双指针进行解答
- 首先应明确,数组是有序数组,那么在考虑复数的情况下,平方后的最小值一定在数组的两端,那么便可以设置左指针left与右指针right,并设置数组result对平方后排序的结果进行存储,也应当设置temp作为中间变量方便数组result的存储
- 对于循环条件left <= right便是要进行完全数组的遍历
- 在循环中,我们应当对最左端与最右端数值的平方大小进行判断,取较大的一方存入数组result中,这里需要注意的是,由于result数组我们是按照递增数组进行排序的,所以temp = result.legnth -1,在存入一个数值后,进行temp–操作,然后按照存入的是最右端还是最左端进行相应操作,以便进行下一个数据的判断。
- 若想无脑做的话可以直接将每个数据的平方求出,再将数组进行排序,这里并未采用
代码
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length - 1;
int[] result = new int[nums.length];
int temp = result.length - 1;
while(left <= right){
if(nums[left] * nums[left] > nums[right] * nums[right]){
result[temp] = nums[left] * nums[left];
temp--;
left++;
}
else{
result[temp] = nums[right] * nums[right];
temp--;
right--;
}
}
return result;
}
}