返回
代码随想录算法训练营Day2 | | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
前端
2023-11-24 05:07:57
** Day 2
- 977. 有序数组的平方
- 给你一个按非递减顺序排列的整数数组 nums,返回一个由数组 nums 中的元素依次按绝对值从大到小排列得到的数组。
- 思路:双指针法
- 代码:
```cpp
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
vector<int> res(n);
int l = 0, r = n - 1;
for (int i = n - 1; i >= 0; i--) {
if (abs(nums[l]) < abs(nums[r])) {
res[i] = nums[r] * nums[r];
r--;
} else {
res[i] = nums[l] * nums[l];
l++;
}
}
return res;
}
```
- 209. 长度最小的子数组
- 给你一个正整数数组 nums 和一个整数 k ,请你找出 nums 中的最短连续子数组,其和至少等于 k。如果不存在这样的子数组,返回 0 。
- 思路:滑动窗口法
- 代码:
```cpp
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size();
int l = 0, r = 0;
int sum = 0;
int minLen = INT_MAX;
while (r < n) {
sum += nums[r];
while (sum >= target) {
minLen = min(minLen, r - l + 1);
sum -= nums[l];
l++;
}
r++;
}
return minLen == INT_MAX ? 0 : minLen;
}
```
- 59. 螺旋矩阵 II
- 给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。
- 思路:模拟
- 代码:
```cpp
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n, 0));
int num = 1;
int top = 0, bottom = n - 1, left = 0, right = n - 1;
while (top <= bottom && left <= right) {
for (int i = left; i <= right; i++) {
matrix[top][i] = num++;
}
for (int i = top + 1; i <= bottom; i++) {
matrix[i][right] = num++;
}
if (top < bottom) {
for (int i = right - 1; i >= left; i--) {
matrix[bottom][i] = num++;
}
}
if (left < right) {
for (int i = bottom - 1; i > top; i--) {
matrix[i][left] = num++;
}
}
top++;
bottom--;
left++;
right--;
}
return matrix;
}
```