class Solution {
public int[] sortedSquares(int[] nums) {
int temp = 0;
for (int i = 0; i < nums.length; i++) {
nums[i] = nums[i] * nums[i];
}
for (int i = 0; i < nums.length-1; i++) {
for (int j = 0; j < nums.length - i - 1; j++) {
if(nums[j] > nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
return nums;
}
}
自解方法用了最笨的,先进行了平方,然后对平方后的数组进行冒泡排序。
双指针法:
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length-1;
int[] result = new int[nums.length];
int temp = result.length-1;
while (left <= right){
if(nums[left] * nums[left] > nums[right] * nums[right]){
result[temp--] = nums[left] * nums[left];
left++;
}
else
{
result[temp--] = nums[right] * nums[right];
right--;
}
}
return result;
}
}
因为初始数组有序,但是存在负数,所以平方后最大值不一定为原数组最右侧的值,但是最大值一定是在两端,因此用双指针法进行判定,每次比较大小加入新的数组。