977. 有序数组的平方

题目

看了卡哥的讲解视频后,写了如下代码:

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中。

posted @ 2024-10-29 19:57  hisun9  阅读(11)  评论(0)    收藏  举报