977. 有序陣列的平方

hisun9發表於2024-10-29

題目

看了卡哥的講解影片後,寫了如下程式碼:

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;
    }
};

結果報錯:

img

感覺是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中。

相關文章