这是一道一看就会,一做就错的题目!
LeetCode链接:977. 有序数组的平方
1.题目描述
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
1 2 3 4
| 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
|
示例 2:
1 2
| 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
|
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
已按 非递减顺序 排序
进阶:
2.题解
2.1 暴力解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { public int[] sortedSquares(int[] nums) { int[] result = new int[nums.length]; for(int i=0;i<nums.length;i++){ result[i] = nums[i] * nums[i]; } for(int i=0;i<result.length-1;i++){ for(int j=i+1;j<result.length;j++){ if(result[i]>result[j]){ int temp = result[j]; result[j] = result[i]; result[i] = temp; } } } return result; } }
|
2.2 双指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { public int[] sortedSquares(int[] nums) { int[] result = new int[nums.length];
int left = 0; int right = nums.length - 1; int newIndex = result.length - 1;
while (left <= right) { if (nums[left] * nums[left] > nums[right] * nums[right]) { result[newIndex--] = nums[left] * nums[left]; left++; } else { result[newIndex--] = nums[right] * nums[right]; right--; } } return result; } }
|