今天练习:有序数组的平方
依然使用双指针法,数组头和尾各有一个指针,谁指向的数的平方大,谁赋给行数组的尾部。
#include<iostream>
#include<vector>
using namespace std;
/*
给定一个非递减序列nums,返回每个数字的平方组成的数组
要求按照非递减顺序排序
*/
class Soluation {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size() - 1; // 数组nums最后一个数字的位置
vector<int> res(nums.size(), 0); // 初始化一个数组,长度为nums.size(),值全为0
int i = 0; // 指针1
int j = nums.size() - 1; // 指针2
while (i <= j) {
if (nums[i] * nums[i] < nums[j] * nums[j]) { // 数组尾元素的平方大
res[k--] = nums[j] * nums[j];
j--;
}
else { // 数组头元素的平方大
res[k--] = nums[i] * nums[i];
i++;
}
}
return res;
}
};
int main() {
Soluation a;
vector<int> nums;
int n = 0;
cout << "请输入n:" << endl;
cin >> n;
cout << "请输入nums:" << endl;
int tem = 0;
for (int i = 0; i < n; i++) {
cin >> tem;
nums.push_back(tem);
}
vector<int> res;
res = a.sortedSquares(nums);
for (int i = 0; i < n; i++)
{
cout << res[i] << " ";
}
cout << endl;
return 0;
}