997.有序数组的平方
给你一个按 非递减顺序 排序的整数数组 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]
提示:
-
1 <= nums.length <= 104
-
-104 <= nums[i] <= 104
-
nums
已按 非递减顺序 排序
进阶:
-
请你设计时间复杂度为
O(n)
的算法解决本问题
思路
我们先创建一个新的数组用来存放数据,在创建两个指针,一个指向原数组的头,一个指向原数组的尾,比较他们俩平方的大小,那个大就放在我们新数组的最后一位上,直到左边的指针超过右边的指针,排序完毕,返回我们新的数组
class Solution { public int[] sortedSquares(int[] nums) { int left = 0; int right = nums.length-1; int[] ans = new int[nums.length]; int count = ans.length-1; while(left<=right) { if(nums[left]*nums[left]>nums[right]*nums[right]) { ans[count] = nums[left]*nums[left]; count--; left++; }else { ans[count] = nums[right]*nums[right]; count--; right--; } } return ans; } }