977.有序数组的平方
vector<int> result(A.size(), 0);
定义了长度为A.size()的向量,且给出每个元素的初值为0
for (int i = 0, j = A.size() - 1; i <= j;)
省略了控制条件语句,则不对循环控制变量进行控制操作 但是分号不可省略
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size() - 1;
vector<int> result(nums.size(), 0);
for (int i = 0, j = nums.size() - 1; 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;
}
};
注意j从数组最右边开始移动,下标为数组长度减1
j = A.size() - 1
209.长度最小的子数组
INT_MAX 和 INT_MIN 是 C++ 的两个宏,代表了整型变量能够存储的最大正整数和最小负整数,分别为 2147483647 和 -2147483648,这两个宏在头文件 <limits.h> 中定义
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum = 0;
int result = INT32_MAX;//代表了整型变量能够存储的最大正整数
int i = 0;
int length = 0;
for (int j = 0; j < nums.size(); j++) {
sum += nums[j];
while (sum >= target) {
length = j - i + 1;
result = result < length ? result : length;
sum = sum - nums[i];
i++;
}
}
return result == INT32_MAX ? 0 : result;//如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
}
};
若result赋0 存在最小区间的条件下 无法返回 会一直返回result==0
找最小区间 给result设置最大值 进行测试 无法找到最小区间
即result没有被赋值 返回0 说明没有符合条件的子集合
59.螺旋矩阵II
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int num = 1;
int target = n * n;
int up = 0;
int right = n - 1;
int down = n - 1;
int left = 0;
vector<vector<int>> res(n, vector<int>(n, 0)); // 使用vector定义一个二维数组
while (num <= target) {
for (int j = left; j <= right; j++) {
res[up][j] = num++;
}
up++; // 在填充上层 填充循环结束后 up++ 相当于up边界减小
for (int i = up; i <= down; i++) {
res[i][right] = num++;
}
right--;
for (int j = right; j >= left; j--) {
res[down][j] = num++;
}
down--;
for (int i = down; i >= up; i--) {
res[i][left] = num++;
}
left++;
}
return res;
}
};