乐趣区

关于leetcode:刷题心得-leetcode-977-leetcode-209-leetcode-59

leetcode 977 题目链接:
https://leetcode.com/problems/squares-of-a-sorted-array/

最终 ac 代码:(双指针法)

class Solution
{
public:
    vector<int> sortedSquares(vector<int> &nums)
    {
        vector<int> v;
        int left = 0;
        int right = nums.size() - 1;
        while (left <= right)
        {if (nums[left] * nums[left] < nums[right] * nums[right])
            {v.push_back(nums[right] * nums[right]);
                --right;
            }
            else
            {v.push_back(nums[left] * nums[left]);
                ++left;
            }
        }

        reverse(v.begin(), v.end());
        return v;
    }
};

std::vector operator[] 不做越界查看,vector::at 才查看

leetcode 209 题目链接:
https://leetcode.com/problems/minimum-size-subarray-sum/

ac 代码:(滑动窗口) 毛病:圈复杂度比拟大

class Solution
{
public:
    int minSubArrayLen(int target, vector<int> &nums)
    {
        int wl = 0;
        int wr = 0;
        int wsum = 0;
        int minWlen = INT_MAX;
        while (true)
        {if (wsum < target)
            {if (wr == nums.size())
                    break;
                wsum += nums[wr];
                ++wr;
            }
            else
            {
                int wlen = wr - wl;
                if (wlen < minWlen)
                    minWlen = wlen;
                wsum -= nums[wl];
                ++wl;
            }
        }
        if (minWlen == INT_MAX)
            return 0;
        return minWlen;
    }
};

双循环版本 (复杂度依然是 O(n),圈复杂度升高 ):

class Solution
{
public:
    int minSubArrayLen(int target, vector<int> &nums)
    {
        int wl = 0;
        int wsum = 0;
        int minWlen = INT_MAX;
        for (int wr = 0; wr < nums.size(); ++wr)
        {wsum += nums[wr];
            while (wsum >= target)
            {
                int wlen = wr - wl + 1;
                if (wlen < minWlen)
                    minWlen = wlen;
                wsum -= nums[wl++];
            }
        }
        if (minWlen == INT_MAX)
            return 0;
        return minWlen;
    }
};

leetcode 59
https://leetcode.com/problems/spiral-matrix-ii/
ac 代码:

class Solution
{
public:
    vector<vector<int>> generateMatrix(int n)
    {vector<vector<int>> v(n);
        for (int i = 0; i < v.size(); i++)
        {v[i] = vector<int>(n);
        }

        int square = n * n;
        int loopnum = n / 2;
        if (n % 2 == 1)
        {v[loopnum][loopnum] = square;
        }

        int num = 1;
        for (int i = 0; i < loopnum; i++)
        {for (int j = i; j < n - 1 - i; ++j)
            {v[i][j] = num++;
            }

            for (int j = i; j < n - 1 - i; ++j)
            {v[j][n - i - 1] = num++;
            }

            for (int j = n - i - 1; j > i; --j)
            {v[n - i - 1][j] = num++;
            }

            for (int j = n - i - 1; j > i; --j)
            {v[j][i] = num++;
            }
        }

        return v;
    }
};
退出移动版