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;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。