977有序数组的平方
第一眼看法 第一眼就想的是暴力求解 通过先平方再排序来实现
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int size=nums.size();
for(int i=0;i<size;i++){
nums[i]=nums[i]*nums[i];
}
sort(nums.begin(),nums.end());
return nums;
}
};
209长度最小的子数组
第一眼想法:
直接遍历每一种窗口大小,看是否有对应的解,结果超时了。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int size=nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i<size-1;i++){
for(int j=0,k=j+i;k<size-1;j++){
int temp=j;
int ans=0;
while(j<k){
ans+=nums[j];
j++;
}
if(ans>=target){
return i;
}
j=temp;
}
}
return 0;
}
};
之后看了解答,发现自己对于滑窗的理解完全不够,没有想明白滑窗能否使用,以及怎么使用。看完解答后也是对于++的使用有了更好的了解知道了++不单单是加一运算还包括了赋值操作。同时对于选择语句(de<result?de:result;)也更熟练
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result=INT_MAX;
int size=nums.size();
int sum=0;
int j=0;
for(int i=0;i<size;i++){
sum+=nums[i];
while(sum>=target){
int de=i-j+1;
sum-=nums[j];
j++;
result=de<result?de:result;
}
}
return result==INT_MAX?0:result;
}
};
59.螺旋矩阵II
第一眼想的跟卡哥在视频里说的一样,在四处找规则对于边界数字个数的规律完全没摸到,直接麻爪,在看了讲解文章之后也是看了好久才理解过来。
在复现的过程中也是漏洞百出:尤其是对于for函数的应用,在函数内部定义的变量会在函数结束是释放内存这一点使我记忆犹新.在之后看了卡哥的视频,理解的更加深刻了。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>res(n,vector<int>(n,0));
int startx=0,starty=0;
int loop=n/2;
int i,j;
int offset=1;
int count=1;
while(loop--){
i=startx;
j=starty;
for(int j=starty;j<n-offset;j++ ){//这是错误的代码,不应该加int 记住哦
res[startx][j]=count++;
}
for(int i=startx;i<n-offset;i++){//这是错误的代码,不应该加int 记住哦
res[i][j]=count++;
}
for(;j>starty;j--){
res[i][j]=count++;
}
for(;i>startx;i--){
res[i][j]=count++;
}
startx++;
starty++;
offset++;
}
if(n%2){
int mid=n/2;
res[mid][mid]=count;
}
return res;
}
};
学习完数组后总结起来感觉自己还是错误百出,基础函数的误用,数学结构的分析,都有着巨大的问题有待改进.