有序数组平方

一、代码思路
思路一:数组本身有序,含有负数,则数组平方后有两边向中间依次递减(最大值分布在数组两侧),则可采用双指针法从两端向中间遍历数组,定义result结果数组存放结果,双指针每移动一次找到当前最大值,放入结果数组。遍历一遍即可得到结果
思路二:不定义新数组,将源数组平方后,进行排序

二、代码实现
public int[] sortedSquares(int[] nums) {
//数组本身有序(存在负数),则平方后有一定规律
//从数组两端向中间依次递减,最大值分布在两侧,在数组两端采用双指针遍历
//定义新数组result存放结果
int low = 0;
int height = nums.length -1;
int k = nums.length -1;
int result[] = new int[nums.length];
while(low<=height){
if(nums[height]nums[height]<nums[low]nums[low]){
result[k] = nums[low]nums[low];
k--;
low++;
}else{
result[k] = nums[height]
nums[height];
k--;
height--;
}
}
return result;
}

三、注意事项
1)注意方法结构,最后返回一个数组result
2)不要将数组数据平方后的结果存储,只用来比较,不改变源数组(要不然会导致多次平方混乱)
3)将元素组全部遍历一遍要low<=height,等于不能少(要不然遍历不全)

posted @ 2024-10-25 15:51  南飞小猪  阅读(22)  评论(0)    收藏  举报