代码随想录-数组03-977 有序数组的平方-java
目录
描述
思路
代码
-
描述
-
思路
-
暴力破解
平方之后重新排序,用快排的时间复杂度O(n+logn)
-
双指针法
数组本来是有序的,平方之后无序的地方是开头和结尾,因为有负数的出现,使用左右双指针用一个循环就可以了
重新创建一个和原数组大小一致的数组,记录平方后有序的值
int left = 0;
int right = nums.length-1;
int k= nums.length-1;
int []res = new int[nums.length];
for(;left<=right;)
if(nums[right]*nums[right]>nums[left]*num[left]){ res[k] = nums[right]*nums[right]} right--;k--;
if(nums[right]*nums[right<=nums[left]*num[left]){ res[k] = nums[left]*num[left]} left++;k--;
-
代码
暴力破解:
class Solution{
public int[] sortedSquares(int[] nums){
for(int i=0;i<nums.length;i++){
nums[i] = nums[i]*nums[i];
}
Arrays.sort(nums);
return nums;
}
}
双指针:
class Solution{
public int[] sortedSquares(int[] nums){
int left =0;
int right = nums.length-1;
int k = nums.length-1;
int []res = new int[nums.length];
for(;left<=right;){
if(nums[left]*nums[left]<nums[right]*nums[right]){
res[k] = nums[right]*nums[right];
k--;
right--;
}
else{
res[k] = nums[left]*nums[left];
k--;
left++;
}
}
return res;
}
}