打卡第二天,没有一题能完整做出来。。。。。。
209.长度最小的子数组
滑动窗口:
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX;
int sum = 0;
int sublen =0;
int j =0;
for(int i =0;i<nums.size();i++)
{
sum += nums[i];
while(sum >= target)
{
sublen =i-j+1;
result = result < sublen ? result:sublen;
sum -= nums[j];
j++;
}
}
return result == INT32_MAX ? 0 : result;
}
};
59.螺旋矩阵II,区间定义。这题做过很多遍,但是还是没有完全掌握。。。。
class Solution {
public:
vector<vector<int>> generateMatrix(int n)
{
vector<vector<int>> nums(n,vector<int>(n,0));
int startx = 0;
int starty = 0;
int loop =n/2;
int count =1;
int offset =1;
int mid = n/2;
int i,j;
while(loop--)
{
i = startx;
j = starty;
for(j;j<n-offset;j++)
{
nums[i][j] = count++;
}
for(i;i<n-offset;i++)
{
nums[i][j] = count++;
}
for(;j>starty;j--)
{
nums[i][j] = count++;
}
for(i;i>startx;i--)
{
nums[i][j] = count++;
}
startx++;
starty++;
offset++;
}
if(n%2)
{
nums[mid][mid] = count;
}
return nums;
}
};
开发商购买土地
前缀和 ----> 求区间和,是个新的思想,好用!
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
std::vector<int> nums(n);
std::vector<int> p(n);
int m;
int sum =0;
for(int i =0;i<n;i++)
{
cin>>m;
nums[i] = m;
sum += nums[i];
p[i] = sum;
}
int a,b;
while(cin>>a>>b)
{
if(a==0)
{
cout<<p[b]<<endl;
}
else{
cout<<p[b] - p[a-1]<<endl;
}
}
return 0;
}