代码算法训练第二天 | 209.长度最小的子数组 | 59.螺旋矩阵II | 58. 区间和

一.长度最小的子数组

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int result=INT32_MAX;;
        int sum=0;
        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=min(result,length);
                sum=sum-nums[i];
                i++;
            }

        }
        return result==INT32_MAX?0:result;  
    }
};

感悟:用的滑动窗口的思想,遍历的是终止位置,如果遍历起始位置就跟暴力法没什么区别了。做完思考的时候还在想为什么for里一个while时间复杂度会是O(n),跟暴力法有什么区别,看了题解才知道主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。

二.螺旋矩阵

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int>(n,0));
        int startx=0;
        int starty=0;
        int loop=n/2;
        int mid=n/2;
        int i,j;
        int count=1;
        int offest=1;
        while(loop--)
        {
            i=startx;
            j=starty;
            for(j;j<n-offest;j++)
            {
                res[i][j]=count++;
            }
            for(i;i<n-offest;i++)
            {
                res[i][j]=count++;
            }
            for(;j>starty;j--)
            {
                res[i][j]=count++;
            }
            for(;i>startx;i--)
            {
                res[i][j]=count++;
            }
            startx++;
            starty++;
            offest+=1;
        }
        if(n%2==1) res[mid][mid]=count;
        return res;
    }
};

感悟:思路不难。写的时候细心点就行。

三.区间和

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, a, b;
    cin >> n;
    vector<int> vec(n);
    vector<int> p(n);
    int presum = 0;
    for (int i = 0; i < n; i++) {
        cin >> vec[i];
        presum += vec[i];
        p[i] = presum;
    }

    while (cin >> a >> b) {
        int sum;
        if (a == 0) sum = p[b];
        else sum = p[b] - p[a - 1];
        cout << sum << endl;
    }
}

感悟:对ACM模式的输入输出还不太熟练,得多加练习,思路容易理解,但暴力法会超时。

四.开发商购买土地

看不懂题目,不想做了,放弃了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值