LeetCode977.有序数组的平方
-
给你一个按 非递减顺序 排序的整数数组 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.可以考虑使用暴力解法,先分别平方,再进行排序;
缺点:时间的复杂度O(nlogn)
2.使用双指针的方法来进行解决:数组平方的最大值在数组的两端,不是最左边就是最右边。
-
class Solution { public int[] sortedSquares(int[] nums) { int left=0; int right=nums.length-1; int[]res=new int[nums.length]; int index=res.length-1; while(left<=right){ if(nums[left]*nums[left]>nums[right]*nums[right]){ res[index--]=nums[left]*nums[left]; ++left; }else{ res[index--]=nums[right]*nums[right]; --right; } } return res; } } /*设置左指针left和右指针right分别指向数组的两端 设置一个等长数组res,用来存储新的数据,使index指向res的末尾 i<=j 最后要处理两个元素 如果left指针所指数的平方大于righ指针所指数的平方,那么left指针所指数的平方赋给res[index],然后进行index--和++left的操作; */