977.有序数组的平方
题目描述:
给你一个按 ==非递减顺序 ==排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
法一:
暴力法,遍历数组,计算每个元素的平方,然后将这些数进行排序
class Solution977{
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i = 0 ; i < nums.size() ; i++){
nums[i] *= nums[i];
}
sort(nums.begin() , nums.end());
return nums;
}
};
法二:
使用双指针法。
- 定义一个空的数组,同时定义一个指针指向该数组的最后一个位置
- 原数组使用两个指针分别指向数组的头部和尾部,分别计算两个元素的平方后比较大小,较大的放入新数组的指针指向的位置,原数组指向较大的数的指针进行移动
- 返回新的数组
class Solution97702{
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size() - 1;
vector<int>num (nums.size() , 0);
for(int i = 0 , j = nums.size() - 1 ; i <= j;){
if(nums[i] * nums[i] < nums[j] * nums[j]){
num[k] = nums[j] * nums[j];
k--;
j--;
}else{
num[k] = nums[i] * nums[i];
k--;
i++;
}
}
return num;
}
};