第二天 数组

209. 长度最小的子数组

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
       int n = nums.size();
        int left = 0, sum = 0;
        int min_len = INT_MAX;
        
        for (int right = 0; right < n; ++right) {
            sum += nums[right];
            while (sum >= target) {
                min_len = min(min_len, right - left + 1);
                sum -= nums[left++];
            }
        }

        return (min_len == INT_MAX) ? 0 : min_len;
    }
};

59.螺旋矩阵II

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        int num = 0;
        vector<vector<int>> answer(n, vector<int>(n));
        int l = 0, r = n - 1, t = 0, b = n - 1;
        
        while(num != n * n)
        {
            // 向右
            for (int j = l; j <= r; j++) {
                answer[t][j] = ++num;
            }

            // 向下
            t++;
            for (int i = t; i <= b; i++) {
                answer[i][r] = ++num;
            }

            // 向左
            r--;
            for (int j = r; j >= l; j--) {
                answer[b][j] = ++num;
            }

            // 向上
            b--;
            for (int i = b; i >= t; i--) {
                answer[i][l] = ++num;
            }
            l++;
        }
        return answer;
    }
};

58.区间和

#include <iostream>
using namespace std;

int a[100000 + 7];
int sum[100000 + 7];
int main()
{
    int n;
    cin >> n;
    int i = 0;
    while(i < n)
    {
        cin >> a[i];
        if(i == 0) sum[i] = a[i];
        else sum[i] = a[i] + sum[i - 1];
        i++;
    }
    int a, b;
    while(cin >> a >> b)
    {
        if (a == 0) cout << sum[b] << endl;
         
        else cout << sum[b] - sum[a - 1] << endl;
    }
    return 0;
}

44.开发商购买土地

#include <iostream>
#include <vector>
#include <climits>
using namespace std;

int n, m;
int main()
{
    cin >> n >> m;
    int sum = 0;
    vector<vector<int>> vec(n, vector<int>(m, 0));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> vec[i][j];
            sum += vec[i][j];
        }
    }

    int result = INT_MAX;
    int count = 0; // 统计遍历过的行
    for (int i = 0; i < n; i++) {
        for (int j = 0 ; j < m; j++) {
            count += vec[i][j];
            // 遍历到行末尾时候开始统计
            if (j == m - 1) result = min (result, abs(sum - count - count));

        }
    }

    count = 0; // 统计遍历过的列
    for (int j = 0; j < m; j++) {
        for (int i = 0 ; i < n; i++) {
            count += vec[i][j];
            // 遍历到列末尾的时候开始统计
            if (i == n - 1) result = min (result, abs(sum - count - count));
        }
    }
    cout << result << endl;


    return 0;
}
posted @ 2025-01-09 22:52  skyler886  阅读(21)  评论(0)    收藏  举报