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;
}