赞
踩
思路:暴力法:全部平方,然后调用排序API,排序算法最快是N*log(N)时间复制度。
双指针法:要利用好原本的数组本就是有序的数组这个条件,
只是有负数 导致平方后变大了,那么平方后的最大值就是在两端取到的,且逐渐往中间变小;所以新建一个数组用来存放平方后的内容,新建两个指针在老数组左右边界,往中间遍历,谁平方大谁就入新数组,再顺便移动边界。
class Solution { public int[] sortedSquares(int[] nums) { int [] ans = new int[nums.length]; //老数组的左右边界下标 int l = 0; int r = nums.length -1; //填充新数组 for(int i=ans.length-1;i>=0;i--) { if(nums[l]*nums[l] <= nums[r]*nums[r]){ ans[i] = nums[r]*nums[r]; r--; }else { ans[i] = nums[l]*nums[l]; l++; } } return ans; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。