看了卡哥的讲解视频后,写了如下代码:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result;
int k = nums.size() - 1;
int i = 0, j = k;
while (i <= j)
{
if (nums[i] * nums[i] <= nums[j] * nums[j])
{
result[k--] = nums[j] * nums[j];
j -- ;
}
else
{
result[k -- ] = nums[i] * nums[i];
i ++ ;
}
}
return result;
}
};
结果报错:
感觉是vector<int> result;
这句有问题,这个语句是默认初始化vector对象,从而创建了一个指定类型的空vector,所以自然后面代码的用到的result[k--]
会报错
然后改成这样就不报错了:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size() - 1;
vector<int> result(nums.size(), 0);
int i = 0, j = k;
while (i <= j)
{
if (nums[i] * nums[i] <= nums[j] * nums[j])
{
result[k--] = nums[j] * nums[j];
j -- ;
}
else
{
result[k -- ] = nums[i] * nums[i];
i ++ ;
}
}
return result;
}
};
补充:
为什么是while(i<=j)
而不是while(i<j)
?
因为当i == j
时的那个点我们也要考虑,将其加到result中。