有序数组的平方--java
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int[] sortedSquares(int[] nums) {
int start = 0,end = nums.length-1; //头尾指针,两边的平方必定比中间大
int i = nums.length-1; //新数组的下标,从尾开始写入数据
int[] result = new int[nums.length]; //新建数组
while(start < end){ //比较两边数字的平方写入到新数组中
if((nums[start]*nums[start]) > nums[end]*nums[end]){
result[i] = nums[start]*nums[start];
i--;
start++;
}else{
result[i] = nums[end]*nums[end];
i--;
end--;
}
}
if(start==end){ //例外情况
result[0] = nums[end]*nums[end];
}
return result; //返回数组
}
}
有暴力方式,但是效率太低,自己也写了个双指针
class Solution {
public int[] sortedSquares(int[] nums) {
//使用双指针,比较大小进行尾插法
int start = 0,end = nums.length-1;
int len = nums.length-1;
int[] result = new int[nums.length];
while(start<=end){
//判断绝对值大小
if((Math.abs(nums[start])>=Math.abs(nums[end]))){
result[len] = nums[start]*nums[start] ;
start++;
}else{
result[len] = nums[end]*nums[end];
end--;
}
len--;
}
return result;
}
}