文章目录
有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
解题思路
依旧是双指针,逐一找出最大值。
初始化一个result数组。
定义最左边的指针与最右边的指针,逐一找出最大值。
因为有负数的存在,所以最大值一定是在最左边或者最右边,一定不在中间。
逐一的找出最大值,插入到result的最右边。代码如下:
当 nums[left] * nums[left] > nums[right] * nums[right] 时 result[index–] = nums[left] * nums[left];
当 nums[left] * nums[left] <= nums[right] * nums[right] 时 result[index–] = nums[right] * nums[right];
详细代码如下
class Solution {
public int[] sortedSquares(int[] nums) {
//双指针
//一前一后,逐一的找出数组中最大的值
//一前一后,数组中最大的值在最前面或者最后面
int left = 0;
int right = nums.length - 1;
int[] result = new int[nums.length];
int index = result.length - 1;
while(left <= right){//left = right 是有意义的
if(nums[left] * nums[left] > nums[right] * nums[right]){
result[index--] = nums[left] * nums[left];
left++;
}else{
result[index--] = nums[right] * nums[right];
right--;
}
}
return result;
}
}
标签:平方,right,数组,nums,int,result,有序,left From: https://blog.csdn.net/m0_64372868/article/details/139263789我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。