今日任务
完成数组刷题- 完成数组基础知识+总结
- 学习二叉树
- 学习第二天的解题思路
常规作业
有序数组的平方
问题
- 不会初始化… 六种初始化方式
这里列举简单的初始化方式。
1) vector<int> num;
2) vector<int> num = nums;
3) vector<int> num(nums.size());
4) vector<int> num(nums.size(), 3);
- 不知道
vector<int> nums
和vector<int>& nums
的区别???
后续修改初始化就解决了 vector<int> newnums(nums.size(), 0);
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> newnums(nums.size(), 0);
int fastIndex = nums.size()-1;
int slowIndex = 0;
int index = nums.size()-1;
while (slowIndex <= fastIndex) {
if (nums[fastIndex] * nums[fastIndex] > nums[slowIndex] * nums[slowIndex]) {
newnums[index--] = nums[fastIndex] * nums[fastIndex];
fastIndex--;
}
else {
newnums[index--] = nums[slowIndex] * nums[slowIndex];
slowIndex++;
}
}
return newnums;
}
};
长度最小的子数组
思路是没有错,但是中间有几个判断并没有考虑清楚。
- 子串的长度为
fast-slow+1
。 - 设置minlenth的初始值为最大,卡哥设置为
INT32_MAX
。最开始设置为0,导致min(初始值,计算值)
全为0; - 设置跳出循环的条件以及输出。在当前slow取不到target时,可以选择跳出循环不再查找。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int slowIndex = 0;
int fastIndex = 0;
int sum = nums[slowIndex];
int minlenth = nums.size();
int flag = 0;
while (slowIndex <= nums.size()-1){
cout << slowIndex << endl;
while (sum < target) {
cout << sum << endl;
fastIndex++;
if (fastIndex >= nums.size()) {
return flag? minlenth: 0;
}
sum += nums[fastIndex];
}
minlenth = min(minlenth, fastIndex - slowIndex + 1);
flag = 1;
sum = sum - nums[slowIndex];
slowIndex++;
}
return minlenth;
}
};
看完题解后,觉得卡哥写的更合理。
- 应该遍历fastIndex而不是slowIndex。
螺旋矩阵
花了三十分钟。对于其中的max_lenth=1
的部分没有判断,导致浪费了很多时间。
以及不熟悉二维vector的初始化。vector<vector<int>> matrix(n, vector<int>(n));
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n));
int matrix_lenth = n;
int row_start = 0;
int col_start = 0;
int row_end = n-1;
int col_end = n-1;
int num = 1;
while (matrix_lenth >= 0) {
if (matrix_lenth == 1) {
matrix[row_start][col_start] = num;
break;
} else {
for (int i = 0; i < matrix_lenth - 1; i++){
matrix[row_start][col_start + i] = num;
cout<< num<< endl;
num++;
}
for (int i = 0; i < matrix_lenth - 1; i++){
matrix[row_start + i][col_end] = num;
num++;
cout<< num<< endl;
}
for (int i = 0; i < matrix_lenth - 1; i++){
matrix[row_end][col_end - i] = num;
num++;
cout<< num<< endl;
}
for (int i = 0; i < matrix_lenth - 1; i++){
matrix[row_end - i][col_start] = num;
num++;
}
row_start++;
col_start++;
row_end--;
col_end--;
matrix_lenth=matrix_lenth-2;
}
}
return matrix;
}
};