題目
看了卡哥的講解影片後,寫了如下程式碼:
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中。