leetcode 977.有序数组的平方
题目链接:
要求:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
解答:
这个题目暴力解法比较简单,就是先平方,后排序,时间复杂度取决于排序的方法的时间复杂度,这个暴力破解就不展示代码了。
如果使用双指针呢?这个双指针有点动态规划的感觉,就是每次比较两端,必然能得到一个最大值,最大值的一端移动一位,左端大右移,右端大左移,这样当两个指针相交,元素就遍历了一遍,就可以得到结果,这个需要额外的一个空间消耗。代码如下:
/**
* 最简单的方法就是暴力,全部平方之后,然后重新排序
* 双指针的方法进行交换,这个应该如何思考呢?就是从两端考虑,必然能取到最大值
*
* @param nums 数组
* @return 平方后的数组
*/
public static int[] sortedSquares(int[] nums) {
int[] result = new int[nums.length];
int resultIndex = nums.length - 1;
int left = 0, right = nums.length - 1;
while (left <= right) {
if (nums[left] * nums[left] <= nums[right] * nums[right]) {
result[resultIndex --] = nums[right] * nums[right];
right --;
} else {
result[resultIndex --] = nums[left] * nums[left];
left ++;
}
}
return result;
}