leetcode 有序数组的平方
解题思路:
递增顺序排列的数组,负数一定在左侧,正数一定在右侧。
使用双指针法,两个指针分别指向下标 0 和 下标 length -1 ,每次比较两个下标对应的平方,将较大的结果逆序放入结果集合中
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
*
*
* 977. 有序数组的平方
* 示例 1:
*
* 输入:[-4,-1,0,3,10]
* 输出:[0,1,9,16,100]
* 示例 2:
*
* 输入:[-7,-3,2,3,11]
* 输出:[4,9,9,49,121]
*
*
* 提示:
*
* 1 <= A.length <= 10000
* -10000 <= A[i] <= 10000
* A 已按非递减顺序排序。
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* 解题思路:
* 递增顺序排列的数组,负数一定在左侧,正数一定在右侧
* 使用双指针法,两个指针分别指向下标 0 和 下标 length -1 ,每次比较两个下标对应的平方,将较大的结果逆序放入结果集合中
*/
public class SquaresOfASortedArray {
public static void main(String[] args) {
int[] array = {-4,-1,0,3,10};
List<Integer> list = Arrays.stream(solution(array)).boxed().collect(Collectors.toList());
list.stream().forEach(value -> System.out.println(value));
}
public static int[] solution(int[] A) {
int n = A.length;
int[] sns = new int[n];
for (int i = 0, j = n-1, pos = n-1; i<=j; ) {
if (A[i]*A[i] > A[j]*A[j]) {
sns[pos] = A[i]*A[i];
++i;
} else {
sns[pos] = A[j]*A[j];
--j;
}
--pos;
}
return sns;
}
}